做了下面2个测试:
(1)
Integer n = new Integer(3);
boolean bo3 = n instanceof Integer;
System.out.println(bo3);
这样打印出来是true(2)
Integer n = new Integer(3);
boolean bo3 = n instanceof String;
System.out.println(bo3);
这样,我认为应该打印出false
但是编译的时候报错了:
Incompatible conditional operand types Integer and String
说Integer 和 String有矛盾!
但是我认为打印出来应该是false才对!不知道boolean bo3 = n instanceof String;这句话为什么编译会提示那样的错误?
谢谢!

解决方案 »

  1.   

    Because Integer is not String.
      

  2.   

    就是因为n是Integer的对象,所以用instanceof判断之后,n不属于String类
    所以应该返回false才对!
    我不知道instanceof的用法了!!谁能说说?
    那像楼上说的,不是永远返回true吗?不是很明白instanceof怎么用了?
      

  3.   

    instanceof 应该只能用到子类上吧
      

  4.   

    就是编译期检查右值。肯定不是永远返回true。
      

  5.   

    晕,A转为B有三种情况
    1.不可能
    Integer -->String 
    2.一定可以 
    String --->Object
    3.有可能(运行是才知道)
    Object ---->String上面的类型都是编译时类型!前两者都是编译时就知道,所有我们不会用它
    但是编译器好像只阻止了第一种情况,而没有阻止第二种情况,就相当域我们写if(1==1) 也不会出错.
    如果在return 语句后还有代码,一般编译不错,但是如果改为
    if(ture) return; 就可以编译通过了.
      

  6.   

    "instanceof 应该只能用到子类上吧"
    好像不是这样吧?
    "就是编译期检查右值"
    不是很明白?右值?
      

  7.   

    能举个关于instanceof用法的好点的例子吗?有意义的!
      

  8.   

    instanceof 操作符主要用于向下造型。
    操作符当然不是随便用的, a instanceof B后的类名B,必须与a指向的对象有继承关系。因为向上造型是自动的,不需要检查,而向下造型必须在“运行时”检查。
      

  9.   

    class A extends B{
      public static void main(String args[]) {
      B bb = new A ();
      B bbbb = new B();
      if (bb instanceof A){
      A a= (A)bb;
      System.out.println("bb instanceof A");
      a.doSth();
      }   //A a= (A)bbbb; //运行时错误
      if (bbbb instanceof A){
      A a= (A)bbbb;
      a.doSth();
      }else System.out.println("bbbb ! instanceof A"); 
      }
      
      void doSth(){System.out.println("hi");}
    }class B{}
      

  10.   

    Object n = new Integer(3);
    boolean bo3 = n instanceof String;
    System.out.println(bo3);
    这样才可以通过,因为原来的n是一个Integer对象,绝对不可能是一个String,编译器直接否定了你的判断
      

  11.   

    lz试一下这个,就知道在C/C++/C#/Java(其他非C的不清楚)反正这些编译器,在编译的时候(也就是平时所讲的编译期)发现代码必然如此,而无需判断的时候,或者代码虽然语法正确,却必然无法执行或者执行失败的情况,都会编译失败
      

  12.   

    这是Java规范里的规定,如果变异是可以判断实例与被判断类型无关就直接在编译时报错