簡體   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