次のコード
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 でエラーなくコンパイルされ、実行時に "false" が出力されます。ただし、Eclipse Juno は「互換性のないオペランド型のオブジェクトとブール値」について不平を言っています。
どうやら javac はプリミティブ booleanをオートボックス化してから、オブジェクトの等価性によってb
比較o
およびオートボックス化し、 を生成しますが、Eclipse はオートボックス化を拒否します。b
false
Java 言語仕様による正しい動作はどれですか? どこにバグを報告すればよいですか?
注:のタイプを に変更するo
とBoolean
、期待どおりに動作します。Eclipse はコードを受け入れ、コードは「true」を出力します。