天天看點

為什麼重寫 equals 時必須重寫 hashCode 方法

1.使用hashcode方法提前校驗,可以避免每一次比對都調用equals方法,提高效率

2.保證是同一個對象,如果重寫了equals方法,而沒有重寫hashcode方法,會出現equals相等的對象,hashcode不相等的情況,重寫hashcode方法就是為了避免這種情況的出現。

hashCode()與 equals()的相關規定

如果兩個對象相等,則 hashcode 一定也是相同的

兩個對象相等,對兩個對象分别調用 equals 方法都傳回 true

兩個對象有相同的 hashcode 值,它們也不一定是相等的

是以,equals 方法被覆寫過,則 hashCode 方法也必須被覆寫

hashCode() 的預設行為是對堆上的對象産生獨特值。如果沒有重寫 hashCode(),則該 class 的兩個對象無論如何都不會相等(即使這兩個對象指向相同的資料)

總結:

就一句,規定,因為為了提高效率,hash類型的存儲結構,添加元素重複性校驗的标準就是先取hashCode值,後判斷equals(),不重寫達不到判等效果。