1

通常,当您有一个对象时,如果两个哈希码相似,则对象 Equals 方法等于另一个相同类型的对象。

Integer 通过比较哈希码以相同的方式工作还是以不同的方式工作?

4

4 回答 4

5

如果您检查 Integer.java 包装类的源代码,您会发现 equals 方法已被覆盖,以检查两个 Integer 对象是否具有相同的 int 值。

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

所以你可以说JDK比较对象内的整数值。

于 2012-12-20T11:49:23.890 回答
4

具有相同哈希码的两个对象不必是equals().

两个对象equals()必须具有相同的哈希码。

这基本上意味着您可能有(偶尔的)哈希码冲突。


Integer equals()方法只是将int它包装的值与另一个Integer值进行比较int。哈希码不会进入其中。


请注意,equals()andhashcode聚合并不是严格要求的,但许多使用 internal 的 JDK 类都依赖它Hashtable,例如各种java.util.Hashxxx类。

于 2012-12-20T11:48:55.913 回答
2

整数 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 回答
2

为什么它对你很重要?

Integer#equals检查两个 int 值是否相等,而不仅仅是引用。所以实际的Integer对象可能不同(不同的引用),但是是等价的。

于 2012-12-20T11:49:09.243 回答