== の動作が説明されていないプリミティブとラッパー オブジェクトを比較する質問する

== の動作が説明されていないプリミティブとラッパー オブジェクトを比較する質問する

理解する必要があるコードがあります:

public static void main(String[] args) {
    Character c = new Character('a');
    Character cy = new Character('a');
    char cx = 'a';

    System.out.println(c == cx);
    System.out.println(cx == cy);
    System.out.println(c == cy);
}

出力:

true
true
false

なぜ 3 番目のステートメントだけが失敗するのか理解できません。

編集: この質問は、プリミティブとオブジェクトの比較に関するものであるため、.equalsvs の質問とは異なります。==

ベストアンサー1

cおよびクラスcyの異なるインスタンスを参照しますCharacter(コンストラクターを呼び出すたびに新しいインスタンスが作成されます)。そのため、これらの参照を比較すると が返されますfalse

一方、どちらかをプリミティブ と比較するとcx、 にアンボックス化されcharchar比較の結果は true になります。

Character.valueOf('a')の代わりにを使用した場合new Character('a')、両方の呼び出しで同じインスタンスが取得され、参照比較は を返しますtrue(引数 <= 127 の場合、はvalueOfキャッシュされたインスタンスを返すため)。Character

おすすめ記事