重複の可能性:
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==は参照によってオブジェクトを比較します。