通常当你有一个对象时,如果两个哈希码相似,那么Equals方法等于另一个相同类型的对象。
Integer是否通过比较哈希码以相同的方式工作,还是以不同的方式工作?
答案 0 :(得分:5)
如果检查Integer.java包装类的源代码,可以发现已重写equals方法以检查两个Integer对象是否具有相同的int值。
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
所以你可以说JDK比较对象内的整数值。
答案 1 :(得分:4)
具有相同哈希码的两个对象不必是equals()
。
equals()
的两个对象必须具有相同的哈希码。
这基本上意味着您可能会遇到(偶尔)哈希码冲突。
Integer
equals()
方法只是将其包含的int
值与其他Integer
的{{1}}值进行比较。 Hashcodes不会进入它。
请注意,int
和equals()
聚合并非严格必需,但是使用内部hashcode
的众多JDK类依赖于它,例如各种Hashtable
课程。
答案 2 :(得分:2)
Integer equals()方法将int值与==
运算符进行比较,参见下面Integer.equals()
方法的代码。
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
答案 3 :(得分:2)
为什么对你很重要?
Integer#equals
检查两个int值是否相等,而不仅仅是引用。所以实际的Integer
对象可能不同(不同的引用),但是等价。