instanceof的问题!!!急`
public class why {
public boolean ok(Object o){
if(o instanceof Inner){
return true;
}else {return false;}
}
class Inner{
}
public static void main(String []args){
why a = new why();
why b = new why();
why.Inner in =a.new Inner();
boolean yesorno;
boolean noyes;
//编译能通过
yesorno = (in instanceof Inner);
//编译不能通过(条件操作数类型 why 和 why.Inner 不兼容)
//通过表达式判断a是不是Inner的类的实例,编译不能通过
noyes = (a instanceof Inner);
//通过调用ok方法判断a是不是Inner类的实例,编译通过
b.ok(a);
}
}
为什么表达式中直接返回BOOLEAN类型yesorno = (in instanceof Inner);可以
而noyes = (a instanceof Inner);却不行??
------解决方案--------------------instanceof在下列几种情况下会发生编译时错误:
1.instanceof左边的变量必须是一个引用类型或null类型(null类型只有null一个可用值)。
2.instanceof左边的变量必须是编译时确定的类型。
3.如果从instanceof左边的变量到右边的类型转换由于编译错误而拒绝,那么instanceof的使用将引起编译错误。因为这种情况下,instanceof表达式总不可能是true。
instanceof的结果只有在左边的变量不是null并且该引用能转换成右边的类型而不引起
ClassCastException异常的情况下才为true,否则为false.