下面的代碼允許`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) –