爲什麼重寫equals還要重寫hashcode

equals和hashcode間的關係:

1.如果兩個對象相同(即equals比較返回true),那麼他們的hashcode一定要相等

2.如果他們的hashcode相等,他們的equals不一定相等

爲什麼重寫equals

我們比較兩個對象,不需要他們的地址相同才能相等的,只需要他們的各個屬性相同,我們就認爲他們是相等的。

hashCode()方法用於返回調用該方法的對象的散列碼值,此方法返回整數類型的散列碼值。

爲什麼重寫equals還要重寫hashcode

假設兩個對象,重寫了其equals方法,其相等條件是屬性相等,equals比較之後返回true說明假設的兩個對象相等,如果沒有重寫hashcode的話,其返回的依然是兩個對象的內存地址,那麼他們的hashcode不相同,這和上面的equals和hashcode間的關係相矛盾!所以如果根據equals(Object)方法,兩個對象是相等的,那麼在兩個對象中的每個對象上調用hashCode()方法必須生成相同的整數結果。

注意:相等的對象必須有相同的散列碼,反之散列碼相同則不一定對象相等,而且不相等的對象並不一定需要有不同的散列碼。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章