2012-12-20 30 views
1

通常情况下,当有对象时,如果两个哈希码相同,则等于方法等于另一个相同类型的对象。整数等于方法

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

+1

OpenJDK比较整数值:http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/Integer.java – irrelephant

+0

为什么它很重要您? –

+0

@AleksanderGralak我是个书呆子! –

回答

4

具有相同散列码的两个对象不需要是equals()

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

这基本上意味着你可能有(偶尔)散列码冲突。


Integerequals()方法简单地比较int值它与其他Integerint值换行。哈希代码不会进入它。


注意,equals()hashcode aggrement没有严格要求,但通过使用内部Hashtable,例如各种java.util.Hashxxx类的许多JDK类依靠。

+0

@Boemian但如果metod等于认为两个对象相等,哈希码必须是两个对象相同的值 –

+2

@MarcRasmussen这正是我所说的。我已经重新措辞我的答案,使其更清晰 – Bohemian

2

Integer equals()方法将int值与==运算符进行比较,请参见下面的Integer.equals()方法的代码。

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

为什么对你很重要?

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

4

如果您检查Integer.java包装类的来源,您可以发现重写了equals方法来检查两个Integer对象是否具有相同的int值。

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

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

+0

只是一个更正。 java.lang.Integer不从Object继承。所以equals方法不是重写的方法。这只是一个成员方法。 – Raheel

+0

@Raheel您可能需要检查[here](http://docs.oracle.com/javase/tutorial/java/IandI/objectclass.html)。 – Jayamohan

+0

感谢您的支持 – Raheel