equals和hashcode間的關係:
1.如果兩個對象相同(即equals比較返回true),那麼他們的hashcode一定要相等
2.如果他們的hashcode相等,他們的equals不一定相等
爲什麼重寫equals
我們比較兩個對象,不需要他們的地址相同才能相等的,只需要他們的各個屬性相同,我們就認爲他們是相等的。
hashCode()方法用於返回調用該方法的對象的散列碼值,此方法返回整數類型的散列碼值。
爲什麼重寫equals還要重寫hashcode
假設兩個對象,重寫了其equals方法,其相等條件是屬性相等,equals比較之後返回true說明假設的兩個對象相等,如果沒有重寫hashcode的話,其返回的依然是兩個對象的內存地址,那麼他們的hashcode不相同,這和上面的equals和hashcode間的關係相矛盾!所以如果根據equals(Object)方法,兩個對象是相等的,那麼在兩個對象中的每個對象上調用hashCode()方法必須生成相同的整數結果。
注意:相等的對象必須有相同的散列碼,反之散列碼相同則不一定對象相等,而且不相等的對象並不一定需要有不同的散列碼。