equals方法的學習筆記
下面給出編寫一完美的equals方法的建議:
顯示引數命名為otherobject,稍後需要將它轉換成另乙個叫做other的變數.
檢測this與otherobject是否為引用同乙個物件.
if (this == otherobject) return
true;
這條語名只是乙個優化.實際上,這是一種經常採用的形式.因為計算這個等式要比乙個個地比較類中的域所付出的代價小得多.
檢測otherobject是否為null,如果為null,返回false.這項檢測是很必要的.
if (otherobject == null) return
false;
比較this與otherobject是否同屬乙個類.如果equals的語義在每個了類中所有改變,就使用getclass檢測:
if (getclass() != otherobject.getclass()) return
false;
如果所有子類都擁用統一的語義,就使用instanceof檢測:
if (!(otherobject instanceof classname)) return
false;
將otherobject轉換為相應的類型別變數:
classname other = (classname) otherobject;
現在開始對所有需要比較的域進行比較了.使用==比較基本型別域,使用equals比較物件域.如果所有的域都匹配,就返回true;否則返回false.
如果在子類中重新定義equals,就要在其中包含呼叫super.equals(other);
equals方法的特性
一 自反性 reflexive obj.equals obj true 二 對稱性 symmetric obja.equals objb true,那麼也有objb.equals obja true 三 傳遞性 transitive obja.equals objb true,objb.equals...
equals方法的重新
object類生成的equals方法在預設的情況下是進行位址比較,但有些時候並不能滿足我們的需要,所以需要按使用者的需求重新定義該方法。舉個例子 假設我們現在想判斷兩個person的資訊,如果全部資訊都相等的話就可以判斷為同乙個人。public class test 在person類重新equals...
equals方法的小結
儘管經常使用equals,也可能理解不一定神,最近又要使用collections.sort看到了這些,總結的不錯。首先equals方法必須滿足自反性 對稱性 傳遞性和一致性。自反性 x.equals x 必須返回true 對稱性 x.equals y 返回true時,y.equals x 也必須返回...