9

次のコード

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
    }
}

javacV1.7.0_15 でエラーなくコンパイルされ、実行時に "false" が出力されます。ただし、Eclipse Juno は「互換性のないオペランド型のオブジェクトとブール値」について不平を言っています。

どうやら javac はプリミティブ booleanをオートボックス化してから、オブジェクトの等価性によってb比較oおよびオートボックス化し、 を生成しますが、Eclipse はオートボックス化を拒否します。bfalse

Java 言語仕様による正しい動作はどれですか? どこにバグを報告すればよいですか?

注:のタイプを に変更するoBoolean、期待どおりに動作します。Eclipse はコードを受け入れ、コードは「true」を出力します。

ideone.com の実行可能なバージョン

4

2 に答える 2

7

これは、プロジェクトの言語レベルの設定です。Java 6 セマンティクスを備えた Java 7 コンパイラを使用している可能性があります。ここに Eclipse はありませんが、使用したコンパイラーが 7 であったにもかかわらず、言語レベルが Java 6 のときにエラーが発生した IntelliJ で再現しました。Eclipse も同じだと思います。このリンクはそれを説明しています。

于 2013-05-27T09:56:40.180 に答える