我写了一个像这样的课程
public class HashCodeImpl{
public int hashCode(){
return 1;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
HashCodeUtil h= new HashCodeUtil();
HashCodeUtil h1= new HashCodeUtil();
System.out.println(h.hashCode());
System.out.println(h1.hashCode());
System.out.println(h);
System.out.println(h1);
System.out.println(h==h1);
}
}
OutPut:
1
com.manu.test.HashCodeUtil@1
com.manu.test.HashCodeUtil@1 false
我的问题是:当我的 hashCode 方法返回相同的值时,为什么System.out.println(h==h1);
是假的吗?
请解释。
因为它们是两个不同的对象引用。==
比较参考文献,而不是hashCode
结果。
为了获得想要的结果,您可以覆盖equals
类中的方法并使用h1.equals(h2)
看看它们是否相等。在这里您可以使用以下结果hashCode
简化对所比较对象的相等性的评估(这并不意味着具有相同哈希码的两个对象相等)。
但请注意,即使对象具有相同的hashCode
并且根据定义是等价的equals
方法,它们是不同的引用,在堆中占据不同的位置。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)