允许"布尔"和"对象"的等式比较?

sle*_*ske 10 java eclipse autoboxing javac

以下代码

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
    }
}
Run Code Online (Sandbox Code Playgroud)

使用javacV1.7.0_15 编译时没有错误,并在运行时打印"false".但是,Eclipse Juno抱怨"不兼容的操作数类型Object和boolean".

显然,javac自动装配了原始布尔值b,然后通过对象相等进行比较o和自动装帧b,产生false,而Eclipse拒绝进行自动装箱.

根据Java语言规范,哪种是正确的行为?我应该在哪里提交错误?

注意:如果我更改oto 的类型Boolean,事情按预期工作:Eclipse接受代码,代码打印"true".

ideone.com上的Runnable版本

Eri*_*agt 7

这是您的项目语言级别设置.您可能正在使用具有Java 6语义的Java 7编译器.我这里没有Eclipse,但是我在IntelliJ中重现了它,当Java 6上的语言级别出现错误时,即使我使用的编译器是7.我猜Eclipse也是一样的.这个链接解释了它.