equals和hashcode的關係的簡單概述
阿新 • • 發佈:2018-12-19
結論:equals和hashcode是密切關聯的, 重寫equals的話,建議要重寫hashcode
原因:
1.背景:hashcode和equals是object類的兩個成員
2.obejct類中對hashcode的註釋(約定),經翻譯如下,
1.在 Java 應用程式執行期間,在對同一物件多次呼叫 hashCode 方法時,必須一致地返回相同的整數,前提是將物件進行 equals 比較時所用的資訊沒有被修改。從某一應用程式的一次執行到同一應用程式的另一次執行,該整數無需保持一致。 2.如果根據 equals(Object) 方法,兩個物件是相等的,那麼對這兩個物件中的每個物件呼叫 hashCode 方法都必須生成相同的整數結果。 3.如果根據 equals(java.lang.Object) 方法,兩個物件不相等,那麼對這兩個物件中的任一物件上呼叫 hashCode 方法不 要求一定生成不同的整數結果。但是,程式設計師應該意識到,為不相等的物件生成不同整數結果可以提高雜湊表的效能。
概述來說:
①兩個物件equals為true的話,hashcode也應該相同
②兩個物件equals為false的話,hashcode最好也要不同,不然影響效率,言外之意就是重寫equals的話推薦也重寫hashcode
重寫兩者的某種實現:使用appche工具類(org.apache.commons.lang)
重寫hashcode:HashCodeBuilder.reflectionHashCode(Obejct object)
重寫Equals:EqualsBuilder.reflectionEquals(Obejct object,Obejct object)