通常,当您有一个对象时,如果两个哈希码相似,则对象 Equals 方法等于另一个相同类型的对象。
Integer 通过比较哈希码以相同的方式工作还是以不同的方式工作?
如果您检查 Integer.java 包装类的源代码,您会发现 equals 方法已被覆盖,以检查两个 Integer 对象是否具有相同的 int 值。
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
所以你可以说JDK比较对象内的整数值。
具有相同哈希码的两个对象不必是equals()
.
两个对象equals()
必须具有相同的哈希码。
这基本上意味着您可能有(偶尔的)哈希码冲突。
该Integer
equals()
方法只是将int
它包装的值与另一个Integer
值进行比较int
。哈希码不会进入其中。
请注意,equals()
andhashcode
聚合并不是严格要求的,但许多使用 internal 的 JDK 类都依赖它Hashtable
,例如各种java.util.Hashxxx
类。
整数 equals() 方法像==
运算符一样比较 int 值,请参见下面的Integer.equals()
方法代码。
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
为什么它对你很重要?
Integer#equals
检查两个 int 值是否相等,而不仅仅是引用。所以实际的Integer
对象可能不同(不同的引用),但是是等价的。