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);却不行??
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);却不行??
解决方案 »
- Add External JARS 和 Add JARS 的区别是什么?
- 在cmd下输入javac命令出现乱码
- 关于getPassword用法
- netbeans下的jtalbe可视化问题
- 如何读取sql server中的image字段并转换成字符串?
- 初学者问题-水仙花数(20分)
- java字符排序
- 谁有dom4j的压缩包以及使用文档发一个,必高分相赠
- 如何改变jtextpane中部分字体的大小,颜色等属性??
- 为什么JBuilder键入代码时总会出现指针后置的情况,该怎么办?
- pccw 电讯盈科 的面试 通知!!!!刚 (求助 为养活家人需要这个工作)
- 请问怎么将OpenJMS 邦定到 tomcat 上
从字面上也可以理解为 instance of xxx 就是xxx的实现why 跟 why.Inner 根本没有继承上的关系 所以不能这么用noyes = (Object)a instanceof Inner;
这样就可以用
但为什么(Object)a instanceof Inner就行 嗯 不明白 Inner难道也是Object型?
1.instanceof左边的变量必须是一个引用类型或null类型(null类型只有null一个可用值)。
2.instanceof左边的变量必须是编译时确定的类型。
3.如果从instanceof左边的变量到右边的类型转换由于编译错误而拒绝,那么instanceof的使用将引起编译错误。因为这种情况下,instanceof表达式总不可能是true。instanceof的结果只有在左边的变量不是null并且该引用能转换成右边的类型而不引起ClassCastException异常的情况下才为true,否则为false.
http://dev.csdn.net/author/axman/3bac371ded184fe989012a8167667ae0.html