爲什麼HashCode和equals要一起重寫

有句話是equals和hashcode必須同時重寫。
那麼爲啥嘞?

其實是分場景的,想一下HashMap,我們在put的時候的流程

  1. 對key進行hash,確定key在數組中的哪一格
  2. 對key用equals或者==去判斷是更新還是插入(多說一句,JDK7.7是頭插,所以併發擴容會死循環,1.8是尾插)

hashCode():不重寫的話,可以理解爲對堆內存的地址值的hash,那麼每個new出來的對象,地址都是不一樣的,即hash值不同。
equals():不重寫的話,比較的是==,即地址值。

結論:如果要用到hash相關的,比如要放到hash表,則要重寫hashCode和equals,否則其他情況只重寫equals也是可以的。但是,誰也不知道哪個對象到底會不會放到hash表,你不放不代表別人不放啊,而且開發是很講究習慣的,要有良好的代碼習慣。都重寫吧!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章