繁体   English   中英

Java 两个 Set 对象 - hashCode() 相同但 .equals() 失败

[英]Java two Set objects - hashCode() are the same but .equals() fails

我有两个自定义对象集 (LinkedHashSet),它们覆盖了 hashCode() 和 equals() 方法。

比较这两组时,即使哈希码相同,equal() 方法也会失败。

    System.out.println("cmContacts.equals(cm2Contacts):" + cmContacts.equals(cm2Contacts));
    System.out.println("cm2Contacts.equals(cmContacts):" + cm2Contacts.equals(cmContacts));
    System.out.println("compare hash codes:" + ( cm2Contacts.hashCode() == cmContacts.hashCode() ) );        

这将返回:

cmContacts.equals(cm2Contacts):false

cm2Contacts.equals(cmContacts):false

比较哈希码:true

根据文档,如果哈希码相同,equals 方法应该返回 true。

集合的哈希码定义为集合中元素的哈希码之和,其中空元素的哈希码定义为零。 这确保 s1.equals(s2) 意味着 s1.hashCode()==s2.hashCode() 对于任何两个集合 s1 和 s2,正如 Object.hashCode() 的一般契约所要求的那样。

https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#equals(java.lang.Object)

任何想法为什么会发生这种情况?

反过来说:如果两个对象相等,则它们必须具有相同的哈希码。 具有相同的哈希码并不意味着对象应该相等。

相同的hashcode()并不意味着equals

您可以将其与 ZipCode 进行比较。 你和你的邻居有相同但不相同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM