黑马程序员技术交流社区

标题: 关于instanceof,为什么会出现这样的错误? [打印本页]

作者: 海狮    时间: 2015-10-18 09:02
标题: 关于instanceof,为什么会出现这样的错误?
程序一:

  1. <div>class TestDemo</div><div>{</div><div>     public static void main(String[] args){</div><div>System.out.println("aaa" instanceof String);</div><div>}}</div>
复制代码
代码通过,打印结果为true

程序二:
  1. class TestDemo
  2. {
  3.      public static void main(String[] args){
  4. System.out.println("aaa" instanceof Integer);
  5. }}
复制代码
编译失败,错误提示为:
  1. TestDemo.java:4: 错误: 不兼容的类型: String无法转换为Integer
  2. System.out.println("aaa" instanceof Integer);
  3.                               ^
  4. 1 个错误
复制代码

这是为什么呢,我只是判断比较,又不是赋值,为什么出现在这样的提示?
程序三:
  1. class TestDemo
  2. {
  3.      public static void main(String[] args){
  4.         Integer a = 3;
  5. System.out.println(a instanceof Integer);
  6. }}
复制代码
编译通过,打印结果为true
程序四:
  1. class TestDemo
  2. {
  3.      public static void main(String[] args){
  4.         Integer a = 3;
  5. System.out.println(a instanceof String);
  6. }}
复制代码

结果
  1. TestDemo.java:5: 错误: 不兼容的类型: Integer无法转换为String
  2. System.out.println(a instanceof String);
  3.                    ^
  4. 1 个错误
复制代码
应该是同样问题,为什么呢?
还有,当代码这样写:
  1. int a = 3;
  2.         System.out.println(a instanceof Integer);
复制代码
  1. TestDemo.java:5: 错误: 意外的类型
  2. System.out.println(a instanceof Integer);
  3.                    ^
  4.   需要: 引用
  5.   找到:    int
  6. 1 个错误
复制代码
会出现上面的错误,又是为什么呢?





作者: 海狮    时间: 2015-10-18 22:35
顶一下,有人知道吗
作者: LLLLL    时间: 2015-10-19 10:52
楼主   可真会玩!
作者: jlq    时间: 2015-10-19 12:44
楼主真会玩
作者: 海狮    时间: 2015-10-19 17:02
{:2_41:}有人知道么,求解释
作者: fmi110    时间: 2015-10-20 13:26
  1. int a = 3;
  2.         System.out.println(a instanceof Integer);
复制代码

a是基本数据类型,Integer是引用数据类型,编译时就可以判断出问题了
至于前面的我也不是很清楚,这个跟instanceof的实现机制有关吧
我觉得 可能在编译时 就先检查 instanceof 两边的参数的字节码.class文件,如果
字节码文件不存在关系就直接抛出异常了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2