java中的equals方法+hashCode方法
生活随笔
收集整理的這篇文章主要介紹了
java中的equals方法+hashCode方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【0】README
0.1)以下內容均為原創,包括源代碼, 旨在理清 equals 和 hashCode 方法的 實現原理;
0.2) for full resource code, please visit
https://github.com/pacosonTang/core-java-volume/blob/master/chapter13/EqualsHashCodeTest.java
【1】equals 方法
1.1)父類Object中的equals 方法, 它本身比較的就是兩個對象的內存地址是否相等(Object.equals 源碼):
1.2)自定義類中,如果希望對象中各個成員變量 分別相等,則它們的equals 方法 返回 true, 則:
【2】hashCode 方法(String.hashCode 源碼)
2.1)而 Object.hashCode 的返回值:
2.2)以下內容轉自 API:http://docs.oracle.com/javase/8/docs/api/
- 2.2.1)譯文如下:
- hashCode的常規約定是:
- 1)對同一個對象的不止一次調用, hashCode 方法必須返回同一個整型值,假如 在equals方法 比較兩個對象的過程中 沒有信息被修改的話。當對同一個應用的不同執行,這個值(hashCode)不需要保持一致;可以不一樣;
- 2)如果兩個對象在 equals 方法中被認為相等, 則 上述兩個對象的 hashCode 也應該返回相同的值;
- 3)不做要求的是,如果 java.lang.Object.equals 認為兩個對象不相等,則 兩個對象的 hashCode 方法 返回 不同的值。然而, 編碼者應該注意的是,對不相等對象產生的不同整型值(hashCode) 可能會影響 哈希表的性能;
- Object.hashCode 的返回值:(對象的內部地址值)
- 要做到盡可能合理實用, Object.hashCode 方法對不同的對象產生不同的整型值。(這往往是通過 將對象的內部地址值轉換為 整型值來實現的, 但這個實現技術不是 Java 編程語言硬性要求的)。
2.3) 我們再來看 Object.hashCode 的源碼:
for detailed native keyword , please visit http://blog.csdn.net/pacosonswjtu/article/details/50312333
總結
以上是生活随笔為你收集整理的java中的equals方法+hashCode方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 濒死体验不是幻觉或梦境,而是一种清晰的意
- 下一篇: java集合——具体的集合