javac
V1.7.0_15と`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
}
}
がエラーなしでコンパイル次のコード、および版画 "偽"。しかし、Eclipse Junoは、 "互換性のないオペランドタイプのObjectとboolean"について不平を言っています。
どうやらjavacは、プリミティブブールb
をautoboxes、その後o
を比較し、Eclipseがオートボクシングを行うことを拒否しながら、false
を得、オブジェクトの平等でb
をautoboxed。
Java言語仕様に基づいた正しい動作はどれですか?どこにバグを記録すべきですか?
注:私はo
Boolean
の種類を変更する場合は、物事が期待どおりに動作:Eclipseはコードを受け入れ、コードのプリント「真」。
Runnable version on ideone.com
あなたのEclipseの設定を確認し、ファンキーなものがあるかどう参照してください。 プロジェクトのプロパティ - > Javaコンパイラは - >エラー/警告 - >潜在的なプログラミングの問題 – blondeamon
は何を「期待される」による - それは 'B'をボックスと参照の等価を使用する必要があります(falseを出力する)またはunboxを 'o'し、プリミティブブール値を使用する(trueを出力する)か? –
[java AutoBoxing規則](http://jcp.org/aboutJava/communityprocess/jsr/tiger/autoboxing.html) –