**:
1.equals()方法和hashcode()方法兩者關係——hashcode方法設計原則
1) 如果兩個物件相同(即用equals比較返回true),那麼它們的hashcode值一定要相同;
2) 如果兩個物件不同(即用equals比較返回false),那麼它們的hashcode值可能相同也可能不同;
3) 如果兩個物件的hashcode相同(存在雜湊衝突),那麼它們可能相同也可能不同(即equals比較可能是false也可能是true)
4) 如果兩個物件的hashcode不同,那麼他們肯定不同(即用equals比較返回false)
hashcode() 返回雜湊值,而 equals() 是用來判斷兩個物件是否等價。等價的兩個物件雜湊值一定相同,但是雜湊值相同的兩個物件不一定等價。
2.重寫equals()方法——偽**
1)自反性:a.equals(a)要返回true
2)對稱性:如果a.equals(b)返回true,那麼b.equals(a)也要返回true
3)傳遞性:如果a.equals(b)返回true,b.equals(c)為true, 則a.equals(c)也要為true. 說白了就是 a = b , b = c , 那麼a = c.
4)一致性:只要a,b物件的狀態沒有改變,a.equals(b)必須始終返回true.
5)a.equals(null) 要返回false.
在覆蓋 equals() 方法時應當總是覆蓋 hashcode() 方法,保證等價的兩個物件雜湊值也相等。
3.重寫equals()方法——具體步驟分為兩步,先重寫equals()方法,後重寫hashcode()方法
重寫equals()方法
示例類class coder
if (anobject instanceof string)
return true;
} }
return false;
}很明顯,這是進行的內容比較,而已經不再是位址的比較。依次類推math、integer、double等這些類都是重寫了equals()方法的,從而進行的是內容的比較。當然,基本型別是進行值的比較。
它的性質有:
對於object
類來說,equals()
方法在物件上實現的是差別可能性最大的等價關係,即,對於任意非null
的引用值x
和y
,當且僅當x
和y
引用的是同乙個物件,該方法才會返回true
。
需要注意的是當equals()方法被override時,hashcode()也要被override。按照一般hashcode()方法的實現來說,相等的物件,它們的hash code一定相等。
hashcode()
方法給物件返回乙個hash code值。這個方法被用於hash tables,例如hashmap。
它的性質是:
對比C 中 與equal方法
c 中equal與 的區別 收藏 對於值型別,如果物件的值相等,則相等運算子 返回 true,否則返回 false。對於string 以外的引用型別,如果兩個物件引用同乙個物件,則 返回 true。對於 string 型別,比較字串的值。操作比較的是兩個變數的值是否相等。equals 方法比較的是兩...
HashCode和equal方法的區別和聯絡
hashcode 和 equal方法過載 1 為什麼要過載equal方法?答案 因為object的equal方法預設是兩個物件的引用的比較,意思就是指向同一記憶體,位址則相等,否則不相等 如果你現在需要利用物件裡面的值來判斷是否相等,則過載equal方法。2 為什麼過載hashcode方法?答案 一...
方法過載,方法重寫
方法過載 前提 必須在同一類中!才能過載 特點 這幾個方法要在乙個類中 這幾個方法名字要一樣 這幾個方法引數項不同 引數型別不同 主要就是 引數列表不能相同 順序可以不同 方法的重寫 前提是繼承關係 訪問修飾符要比繼承之前的大,返回值型別相同,方法名相同,引數列表相同,但方法體不同,稱為方法的重寫 ...