-1
2つのBooleanオブジェクトを==で比較すると間違った答えが得られることに気づきました。Java Booleanクラスの比較
以下のテストコードを見てください。テストaとテストcでは、一貫した回答が得られます。
テストbが失敗します。 Boolean.TRUEへの参照を返す代わりに、新しいBoolean(true)が同じ値を持つ別のオブジェクトを作成できるようです。彼らはあなたがnew
でb
を割り当てられているので、あなたが偽の取得メモリ内の同じオブジェクトである場合に
public static void main(String[] args) {
Boolean a = Boolean.TRUE;
Boolean b = new Boolean(true);
Boolean c = null;
boolean x = true;
boolean y = false;
System.out.println("Test a");
System.out.println((a == Boolean.TRUE) ? "TRUE" : "FALSE");
System.out.println((Boolean.TRUE.equals(a)) ? "TRUE" : "FALSE");
System.out.println("Test b");
System.out.println((b == Boolean.TRUE) ? "TRUE" : "FALSE");
System.out.println((Boolean.TRUE.equals(b)) ? "TRUE" : "FALSE");
System.out.println("Test c");
System.out.println((c == Boolean.TRUE) ? "TRUE" : "FALSE");
System.out.println((Boolean.TRUE.equals(c)) ? "TRUE" : "FALSE");
/* OUTPUT is
Test a
TRUE
TRUE
Test b
FALSE
TRUE
Test c
FALSE
FALSE
*/
}
何が質問ですか?それがJavaの仕組みです。 – skaffman
それは本当です...だから何が問題なのですか? –
おそらく、コンストラクタの呼び出しが何かを返すと思われる理由を調べてみてください。あるいは、もしあなたが 'Boolean'のためのパラメータ化されたコンストラクタを書くなら、' Boolean.TRUE'を返すためにそれを書くとどう思いますか? –