下面的代码允许`boolean`和`Object`的平等比较?
public class TestComparison {
public static void main(String[] args) throws Exception {
boolean b = true;
Object o = new Boolean(true);
System.out.println("comparison result: "+
(o == b)); // Eclipse complains about this expression
}
}
编译没有错误与javac
V1.7.0_15,并打印 “假” 时运行。但是,Eclipse Juno抱怨“不兼容的操作数类型Object和布尔值”。
显然的javac autoboxes原始布尔b
,然后比较o
和由对象平等autoboxed b
,得到false
,而Eclipse的拒绝做自动装箱。
根据Java语言规范,哪种行为是正确的?我应该在哪里提交错误?
注:如果我改变的o
到Boolean
类型,事情如预期:月食接受代码和代码打印“真”。
Runnable version on ideone.com
检查您的Eclipse设置,看看是否有什么东西时髦: 项目属性 - > Java编译器 - >错误/警告 - >潜在的规划问题 – blondeamon
要看你“预期”是什么 - 应该把它框'B'和使用引用相等(打印错误)或unbox'o'并使用原始布尔相等(打印真)? –
[Java AutoBoxing规则](http://jcp.org/aboutJava/communityprocess/jsr/tiger/autoboxing.html) –