標籤:
首先參考文章:http://www.oschina.net/translate/working-with-hashcode-and-equals-methods-in-java
1,equals方法的比較與 == 的區別是什嗎?為什麼需要重寫equals方法?
2,為什麼說重寫了equals方法最好重寫hashCode方法?該問題在參考博文裡面有一個執行個體解釋了原因。
3,如何重寫equals方法和hashCode方法?
————————————————————————————————————————————————
1,equals 方法在Object類中,而任何類都繼承於Object類,因此任何類都有equals方法。而Object類中的equals方法比較兩個對象的原則是:兩個對象是否在記憶體中同一個位置(與 == 的作用相同),並不是基於對象的特徵來進行比較的,因此這也是為什麼需要重寫equals方法的原因。
比如說:表示人的 Person類,在現實生活中,只要兩個社會安全號碼碼相同,就認為它代表的是同一個人。那麼,不管你 new 了幾個Person對象,只要這幾個Person對象的ID(身份證)屬性相同,對象1.equals(對象2) 就應該返回true,而與對象1、對象2在記憶體中的位置無關!
2,重寫了equals為什麼要重寫hashCode呢?
文中開頭的參考博文中已經提到了一個原因。也就是說,既然 對象1.equals(對象2) 返回了true,即這兩個對象實際上應該是同一個對象,那麼應該儲存到記憶體中相同的位置。而hashCode就是用來計算對象放置的物理內在地址。
有關hashCode作用繼承參考以下文章:
http://c610367182.iteye.com/blog/1930676
http://blog.csdn.net/fenglibing/article/details/8905007
3,這個要根據實際的需要來進行重寫。對於equals方法而言,有一個固定的模式,(this == obj obj==null ……)這不介紹了。注意,可以使用Eclipse中的產生equals和hashCode方法。(Source-->generate hashCode() and equals....)
JAVA中equals方法與hashCode方法學習