重複の可能性:
Equals と == の違い
どの場合、演算子とequals()
まったく同じように機能しますか?==
どちらも に対して同様に動作するようですprimitive data types
。両方が同等に機能する他のケースはありますか?
重複の可能性:
Equals と == の違い
どの場合、演算子とequals()
まったく同じように機能しますか?==
どちらも に対して同様に動作するようですprimitive data types
。両方が同等に機能する他のケースはありますか?
==
タイプの参照のビットを比較するObject
ため、同じオブジェクトへの参照がある場合はそうなります
例えば
Integer
値 -128 および 127 (両端を含む) の場合、(オートボクシング中に) インスタンスがキャッシュされるため、前述の値の範囲の場合に当てはまります。Integer
プリミティブ データ型の場合はありませんequals()
(オブジェクトではなく、メソッドがないため)。
のデフォルトの実装 (クラス Object 内)は、equals()
オブジェクトの同一性チェックのみを行います (つまり、 と同じ==
です)。したがって、クラスがそれをオーバーライドしない場合、 と同じ結果になり==
ます。
プリミティブ (特殊なケース) に加えて、参照の等価性が実際の等価性と同じであるすべてのケースで同様に動作します==
。equals()
Integer
参照 (通常は -128 から +127 の間ですが、これは構成可能であり、インスタンスの構築方法によって異なります)Object
(およびオーバーライドしないその他のクラスequals()
)のインスタンス明らかに、疑わしい場合は使用してくださいequals()
オペレーター==
は常に、オブジェクトの参照とプリミティブ型の実際の値を比較します。
のようなプリミティブの配列は、int[]
まだオブジェクトであることに注意してください!
String test1 ="test";
String test2 = test1;
System.out.println(test1 == test2);
System.out.println(test1.equals(test2));
どちらも印刷されます -
真実
真実
equals()
メソッドは比較で評価しますhashCode
。While==
は参照によってオブジェクトを比較します。