1

重複の可能性:
Equals と == の違い

どの場合、演算子とequals()まったく同じように機能しますか?==

どちらも に対して同様に動作するようですprimitive data types。両方が同等に機能する他のケースはありますか?

4

6 に答える 6

4

==タイプの参照のビットを比較するObjectため、同じオブジェクトへの参照がある場合はそうなります

例えば

Integer値 -128 および 127 (両端を含む) の場合、(オートボクシング中に) インスタンスがキャッシュされるため、前述の値の範囲の場合に当てはまります。Integer

于 2012-06-13T10:34:34.137 に答える
3

プリミティブ データ型の場合はありませんequals()(オブジェクトではなく、メソッドがないため)。

のデフォルトの実装 (クラス Object 内)は、equals()オブジェクトの同一性チェックのみを行います (つまり、 と同じ==です)。したがって、クラスがそれをオーバーライドしない場合、 と同じ結果になり==ます。

于 2012-06-13T10:36:02.273 に答える
1

プリミティブ (特殊なケース) に加えて、参照の等価性が実際の等価性と同じであるすべてのケースで同様に動作します==equals()

  • インターン弦
  • 特定のInteger参照 (通常は -128 から +127 の間ですが、これは構成可能であり、インスタンスの構築方法によって異なります)
  • シングルトン
  • Object(およびオーバーライドしないその他のクラスequals())のインスタンス

明らかに、疑わしい場合は使用してくださいequals()

于 2012-06-13T10:37:00.823 に答える
1

オペレーター==は常に、オブジェクトの参照とプリミティブ型の実際の値を比較します。

のようなプリミティブの配列は、int[]まだオブジェクトであることに注意してください!

于 2012-06-13T10:35:42.953 に答える
1
    String test1 ="test";
    String test2 = test1;
    System.out.println(test1 == test2);
    System.out.println(test1.equals(test2));

どちらも印刷されます -

真実

真実

于 2012-06-13T10:36:37.313 に答える
0

equals()メソッドは比較で評価しますhashCode。While==は参照によってオブジェクトを比較します。

于 2012-06-13T10:42:23.893 に答える