如何衝寫類的hashcode方法,重寫hashcode方法,一般也要重寫equals方法。原則是:
1.equals方法必須滿足自反性(x.equals(x)必須返回true)、對稱性(x.equals(y)返回true時,y.equals(x)也必須返回true)、傳遞性(x.equals(y)和y.equals(z)都返回true時,x.equals(z)也必須返回true)和一致性(當x和y引用的物件資訊沒有被修改時,多次呼叫x.equals(y)應該得到同樣的返回值),而且對於任何非null值的引用x,x.equals(null)必須返回false。
2.如果兩個物件相同(equals方法返回true),那麼它們的hashcode值一定要相同。
實現高質量的equals方法的訣竅包括:
1. 使用==操作符檢查"引數是否為這個物件的引用「;
2. 使用instanceof操作符檢查"引數是否為正確的型別";
3. 對於類中的關鍵屬性,檢查引數傳入物件的屬性是否與之相匹配;
4. 編寫完equals方法後,問自己它是否滿足對稱性、傳遞性、一致性;
5. 重寫equals時總是要重寫hashcode;
6. 不要將equals方法引數中的object物件替換為其他的型別,在重寫時不要忘掉@override註解。
例子:以**號碼為例,這裡還利用了素數。對於**號碼,其實只要用比9大的素數就可以了,這裡用了31,也可以用11.
public class phonenumber
@override
public boolean equals(object obj) else if (!linenumber.equals(other.linenumber))
return false;
if (prefix == null) else if (!prefix.equals(other.prefix))
return false;
return true;
}}
(1如果兩個物件相同(equals方法返回true),那麼它們的hashcode值一定要相同
重寫hashCode方法
hashcode方法在object類中定義如下 public native int hashcode 說明是乙個本地方法,其實現和本地機器相關。我們可以在自己的類中覆蓋hashcode方法。下面string類中重寫的hashcode方法 public int hashcode hash h retu...
hashcode 與equals 方法的重寫
equals 是超類object的乙個基本方法。public boolean equals object obj 當類有自己的 邏輯相等 的概念,而且超類還沒有覆蓋equals來實現期望的行為。預設情況下也就是從超類object繼承而來的equals方法與 是完全等價的,比較的都是物件的記憶體位址,...
重寫hashcode和equals方法的原則
public class element public int hashcode public boolean equals object o 在equals方法中需要向下轉型,效率很低,所以先判斷hashcode方法可以提高效率.附 其中 number 處是我們生成的你要計算在內的字段的 生成規則...