if(JComboBox.getSelectItem() instanceof Item)
为什么是真的?JComboBox.getSelectItem()返回值是Object类型的。Item item=(Item)JComboBox.getSelectItem(),要强制类型转换、

解决方案 »

  1.   

    instanceof JComboBox.getSelectItem()返回值是Object类型的这个objcet的类的实例 应该是Item 的实例 或者item的实例 或者 实现item这个接口的实例
      

  2.   

    Object object=new Object();
    object=1;
    if(object instanceof Integer)
    true
      

  3.   

    可以使用引用变量instanceif 类名 来 判断该引用型变量所“指向”的对象是否属于该类或该类的子类
    也就是那个object引用变量指向的对象 是属于item类或者是item类的子类
      

  4.   

    我的理解是:
    Q1. if(JComboBox.getSelectItem() instanceof Item) 为什么是真的?
    A1:这是发生在运行时,不是编译时,它请求 JVM 鉴定一下。Q2:JComboBox.getSelectItem()返回值是Object类型的。Item item=(Item)JComboBox.getSelectItem(),要强制类型转换
    A2:这个发生在编译时,它请求编译器先检测对象的类型并且把它记住,这样的话 Item 的方法对后面的其它程序调用来说就是“可见的”,没有经过强制转换的,JVM 就认为是不可见的,调用它就有问题,这里面仅仅是可见性的问题,那个对象本身的类型没有变,只是它的某些方法不让你用,想用的话可以 Cast Down 再用,否则必须用反射来处理,同时反射也间接地证明了,其实那个本身还是那个对象类型。有里有一个关于 Cast 的注意事项,一个基本类型的强制转换和一个抽象类型的强制转换是不一样的,比如一个 float 强制转换成一个 int,这会改变内存的布局,比如一个 float 也是二进制表示的,但它布局是按 IEEE 的浮点格式来处理的,同样是二进制,但不同的位表示的可能是尾数或者是指数;而抽象类型中,仅仅是改变可见性,不改变内存布局。