关于instanceof

acboboly 2005-12-08 02:25:59
做了下面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;这句话为什么编译会提示那样的错误?
谢谢!
...全文
1118 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
北极猩猩 2005-12-09
  • 打赏
  • 举报
回复
这是Java规范里的规定,如果变异是可以判断实例与被判断类型无关就直接在编译时报错
shine333 2005-12-09
  • 打赏
  • 举报
回复
lz试一下这个,就知道在C/C++/C#/Java(其他非C的不清楚)

反正这些编译器,在编译的时候(也就是平时所讲的编译期)发现代码必然如此,而无需判断的时候,或者代码虽然语法正确,却必然无法执行或者执行失败的情况,都会编译失败
ChDw 2005-12-09
  • 打赏
  • 举报
回复
Object n = new Integer(3);
boolean bo3 = n instanceof String;
System.out.println(bo3);


这样才可以通过,因为原来的n是一个Integer对象,绝对不可能是一个String,编译器直接否定了你的判断
yqj2065 2005-12-09
  • 打赏
  • 举报
回复
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{}
yqj2065 2005-12-09
  • 打赏
  • 举报
回复
instanceof 操作符主要用于向下造型。
操作符当然不是随便用的, a instanceof B后的类名B,必须与a指向的对象有继承关系。因为向上造型是自动的,不需要检查,而向下造型必须在“运行时”检查。
acboboly 2005-12-09
  • 打赏
  • 举报
回复
顶!
acboboly 2005-12-09
  • 打赏
  • 举报
回复
哦,明白了些!谢谢大家帮助^_^
acboboly 2005-12-08
  • 打赏
  • 举报
回复
能举个关于instanceof用法的好点的例子吗?有意义的!
acboboly 2005-12-08
  • 打赏
  • 举报
回复
"instanceof 应该只能用到子类上吧"
好像不是这样吧?
"就是编译期检查右值"
不是很明白?右值?
treeroot 2005-12-08
  • 打赏
  • 举报
回复
晕,A转为B有三种情况
1.不可能
Integer -->String
2.一定可以
String --->Object
3.有可能(运行是才知道)
Object ---->String

上面的类型都是编译时类型!

前两者都是编译时就知道,所有我们不会用它
但是编译器好像只阻止了第一种情况,而没有阻止第二种情况,就相当域我们写if(1==1) 也不会出错.
如果在return 语句后还有代码,一般编译不错,但是如果改为
if(ture) return; 就可以编译通过了.
gemouzhi 2005-12-08
  • 打赏
  • 举报
回复
就是编译期检查右值。

肯定不是永远返回true。
PigBrother 2005-12-08
  • 打赏
  • 举报
回复
instanceof 应该只能用到子类上吧
acboboly 2005-12-08
  • 打赏
  • 举报
回复
就是因为n是Integer的对象,所以用instanceof判断之后,n不属于String类
所以应该返回false才对!
我不知道instanceof的用法了!!谁能说说?
那像楼上说的,不是永远返回true吗?不是很明白instanceof怎么用了?
treeroot 2005-12-08
  • 打赏
  • 举报
回复
明知道不是还判断?
kingofhawks 2005-12-08
  • 打赏
  • 举报
回复
Because Integer is not String.

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧