通常、オブジェクトがある場合、オブジェクトの Equals メソッドは、2 つのハッシュコードが似ている場合、同じタイプの別のオブジェクトと等しくなります。
Integer はハッシュコードを比較することで同じように機能しますか、それとも別の方法で機能しますか?
Integer.java ラッパー クラスのソースを確認すると、両方の Integer オブジェクトが同じ int 値を持つことを確認するために equals メソッドがオーバーライドされていることがわかります。
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
したがって、JDK はオブジェクト内の整数値を比較すると言えます。
同じハッシュコードを持つ 2 つのオブジェクトが である必要はありませんequals()
。
2 つのオブジェクトequals()
のハッシュコードは同じでなければなりません。
これは基本的に、(時折)ハッシュコードの衝突が発生する可能性があることを意味します。
このメソッドは、ラップする値を他の の値Integer
equals()
と単純に比較します。ハッシュコードは入りません。int
Integer
int
equals()
andhashcode
集合体は厳密には必須Hashtable
ではありませんが、さまざまなクラスなど、 internal を使用する多数の JDK クラスによって依存されていることに
注意してくださいjava.util.Hashxxx
。
なぜあなたにとって重要なのですか?
Integer#equals
参照だけでなく、2 つの int 値が等しいかどうかをチェックします。したがって、実際のInteger
オブジェクトは異なる (参照が異なる) 可能性がありますが、同等です。
Integer equals() メソッドは、演算子と同様に int 値を比較します。以下のメソッド==
のコードを参照してください。Integer.equals()
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}