1

通常、オブジェクトがある場合、オブジェクトの Equals メソッドは、2 つのハッシュコードが似ている場合、同じタイプの別のオブジェクトと等しくなります。

Integer はハッシュコードを比較することで同じように機能しますか、それとも別の方法で機能しますか?

4

4 に答える 4

5

Integer.java ラッパー クラスのソースを確認すると、両方の Integer オブジェクトが同じ int 値を持つことを確認するために equals メソッドがオーバーライドされていることがわかります。

public boolean equals(Object obj) {
       if (obj instanceof Integer) {
           return value == ((Integer)obj).intValue();
       }
       return false;
}

したがって、JDK はオブジェクト内の整数値を比較すると言えます。

于 2012-12-20T11:49:23.890 に答える
4

同じハッシュコードを持つ 2 つのオブジェクトが である必要はありませんequals()

2 つのオブジェクトequals()のハッシュコードは同じでなければなりません。

これは基本的に、(時折)ハッシュコードの衝突が発生する可能性があることを意味します。


このメソッドは、ラップする値を他の の値Integer equals()と単純に比較します。ハッシュコードは入りません。intIntegerint


equals()andhashcode集合体は厳密には必須Hashtableではありませんが、さまざまなクラスなど、 internal を使用する多数の JDK クラスによって依存されていることに 注意してくださいjava.util.Hashxxx

于 2012-12-20T11:48:55.913 に答える
2

なぜあなたにとって重要なのですか?

Integer#equals参照だけでなく、2 つの int 値が等しいかどうかをチェックします。したがって、実際のIntegerオブジェクトは異なる (参照が異なる) 可能性がありますが、同等です。

于 2012-12-20T11:49:09.243 に答える
2

Integer equals() メソッドは、演算子と同様に int 値を比較します。以下のメソッド==のコードを参照してください。Integer.equals()

public boolean equals(Object obj) {
   if (obj instanceof Integer) {
      return value == ((Integer)obj).intValue();
   }
   return false;
}
于 2012-12-20T11:48:46.450 に答える