JAVA中equals方法與hashCode方法學習

來源:互聯網
上載者:User

標籤:

首先參考文章: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方法學習

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.