This question already has answers here:
What issues should be considered when overriding equals and hashCode in Java?
                                
                                    (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.

从“或到地图或集合”检索或添加对象时,它有什么区别吗?

任何例子将不胜感激。

最佳答案

当您为自己的类实现自定义的hashCodeequals方法时,这是您需要遵守的约定,以便在Java中实现哈希和对象相等性测试。他们在书中提到这一点,因为在您自己的实现中有可能违反您自己的自定义hashCodeequals方法中的那些合同

您所讨论的条件是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/

10-11 15:05
查看更多