java中equals,==和hashCode關係揭祕

1. ==

(1)比較基本數據類型,比較的是它們的值:byte,short,char,int,long,float,double,boolean.
(2)比較引用類型(類,接口,數組),比較的是它們在內存中的存放地址,即,相同的對象才爲true.html

2.equals方法:

(1)默認狀況下的Object類的原生的equals方法,用於比較對象的內存地址,此時與==是等價的。
(2)類中覆蓋了原生的equals方法,就須要根據代碼具體判斷。通常覆蓋後的新equals方法都是比較對象的內容,如String類。算法

3.hashCode方法:返回一個hash碼

(1)Object類提供的默認實現保證了每一個對象的hash碼都不一樣(在對象的內存地址的基礎上通過特定算法返回一個hash碼)
(2)若是a = b, 則hash(a) = hash(b);
(3)若是a != b, 則hash(a)和hash(b)可能獲得相同的散列值
(4)hashCode方法可以將插入元素迅速定位到它的位置(其中還涉及到衝突碰撞的問題)數組

4.equals方法和hashCode方法的關係:

(1)若是兩個對象equals,Java運行時環境會認爲他們的hashcode必定相等。
(2)若是兩個對象不equals,他們的hashcode有可能相等。
(3)若是兩個對象hashcode相等,他們不必定equals。
(4)若是兩個對象hashcode不相等,他們必定不equals。
(5)所以,若重寫equals(Object obj)方法,有必要重寫hashcode()方法,確保經過equals(Object obj)方法判斷結果爲true的兩個對象具有相等的hashcode()返回值。code

參考資料htm

相關文章
相關標籤/搜索