理解する必要があるコードがあります:
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 番目のステートメントだけが失敗するのか理解できません。
編集: この質問は、プリミティブとオブジェクトの比較に関するものであるため、.equals
vs の質問とは異なります。==
ベストアンサー1
c
およびクラスcy
の異なるインスタンスを参照しますCharacter
(コンストラクターを呼び出すたびに新しいインスタンスが作成されます)。そのため、これらの参照を比較すると が返されますfalse
。
一方、どちらかをプリミティブ と比較するとcx
、 にアンボックス化されchar
、char
比較の結果は true になります。
Character.valueOf('a')
の代わりにを使用した場合new Character('a')
、両方の呼び出しで同じインスタンスが取得され、参照比較は を返しますtrue
(引数 <= 127 の場合、はvalueOf
キャッシュされたインスタンスを返すため)。Character