This question already has answers here:
What issues should be considered when overriding equals and hashCode in Java?
(11个答案)
5年前关闭。
在SCJP书中有一个表
我对最后一排感到困惑。如果
因为根据我的理解,如果HashCodes不同于HashCodes,那么将有不同的存储桶,并且从中查找Object不会产生问题,为什么需要“ x.equals(y)== false”?
让我们假设
从“或到地图或集合”检索或添加对象时,它有什么区别吗?
任何例子将不胜感激。
(11个答案)
5年前关闭。
在SCJP书中有一个表
我对最后一排感到困惑。如果
x.hashCode()! = y.hasCode()
比为什么ut是“必需”,则x.equals(y)== false。因为根据我的理解,如果HashCodes不同于HashCodes,那么将有不同的存储桶,并且从中查找Object不会产生问题,为什么需要“ x.equals(y)== false”?
让我们假设
x.hashCode()! = y.hashCode()
。和x.equals(y) == true.
从“或到地图或集合”检索或添加对象时,它有什么区别吗?
任何例子将不胜感激。
最佳答案
当您为自己的类实现自定义的hashCode
和equals
方法时,这是您需要遵守的约定,以便在Java中实现哈希和对象相等性测试。他们在书中提到这一点,因为在您自己的实现中有可能违反您自己的自定义hashCode
和equals
方法中的那些合同
您所讨论的条件是x.equals(y) == true
的直接结果暗含x.hashCode() == y.hashCode()
(表中的第一行)
(P
表示Q
)与(not Q
表示not P
)相同,P是该教科书表中第一行的x.equals(y) == true
,而Q是x.hashCode() == y.hashCode()
关于java - SCJP HashCode()和Equals()混淆,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25525146/