我最近偶然发现了一个让我停下来思考的问题......
对我来说,下面的代码应该总是触发错误,但是当我的一位同事问我为什么 Eclipse 不显示错误时,我什么也回答不了。
class A {
public static void main(String... args) {
System.out.println(new Object() == 0);
}
}
我已经调查并发现在源代码级别 1.6 中确实会引发错误:
incomparable types: Object and int
但现在在 1.7 中它可以编译。
请问,什么新功能保证了这种行为?
最佳答案
“什么新功能保证了这种行为?”是什么意思? ? 1.7 正在修复 1.6 中存在的问题。 new Object() == 0
应该从未产生错误,并且总是导致触发自动装箱。
根本没有理由
Object a= 5 ;
是正确的,而不是表达式
a == 3
甚至
a == 5
这非常奇怪,恕我直言,与语言规范本身相矛盾。
不过,从动态的角度来看,a == 5
仍然计算为 false
而 (Integer)a == 5
或甚至 (int)a == 5
的计算结果为 true
。原因是自动拆箱被设计为永远不会产生 ClassCastException
,因此仅针对包装类型静态发生。后两种情况是显式转换,因此通常允许 ClassCastException
。
关于java - 比较 Java 7 中的 Object 和 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18500209/