hashcode和equals

若兩個對象equals相等(重寫了equals方法),但不在一個區間(沒有重寫hashcode方法),由於hashCode的值在重寫以前是對內存地址計算得出,因此根本沒有機會進行比較,會被認爲是不一樣的對象。因此Java對於eqauls方法和hashCode方法是這樣規定的: 
1 若是兩個對象相同,那麼它們的hashCode值必定要相同。也告訴咱們重寫equals方法,必定要重寫hashCode方法,也就是說hashCode值要和類中的成員變量掛上鉤,對象相同–>成員變量相同—->hashCode值必定相同。 
2 若是兩個對象的hashCode相同,它們並不必定相同,這裏的對象相同指的是用eqauls方法比較。spa

注意:僅僅重寫equals方法,按道理應該是不對的,在重寫equals方法時,也要重寫hashcode方法,而且要保持判斷的一致性。作到相等(equals)的兩個對象的hashcode必定要相同。.net

hashset,hashmap中放入對象時,會先判斷hashcode,hashcode不一樣,則認爲是不一樣的對象;若是hashcode相同,則去比較equals,若是equals不一樣,則認爲不一樣對象,相同則認爲是相同對象。(實際上他還用==比較了對象,請看下面連接所寫文章)code

https://blog.csdn.net/qq_21688757/article/details/53067814?ticket=ST-56532-unjRzSC7ufBt3I3nKejO-passport.csdn.net對象

相關文章
相關標籤/搜索