編寫完美的一個equals()方法的建議

equals():

  1. 顯示參數命名爲otherObject,稍後須要將它轉換成另外一個叫作other的變量。java

  2. 檢測this與otherObject是否引用同一個對象:優化

if(this == otherObject) 
    return true;

      這條語句只是一個優化。實際上,這是一種常常採用的形式。由於計算這個等式要比一個一個地比較類中的域所付出的的代價要小的多。this

   3.  檢測otherObject是否爲null,若是爲null,返回false。這項檢測是很必要的。code

if(otherObject == null) 
    return false;

   4.  比較this與otherObject是否屬於同一個類。若是equals的語義在每個子類中有所改變,就使用getClass檢測:對象

if(getClass() != otherObject.getClass())
    return false;

  若是全部的子類都擁有統一的語義,就使用instanceof檢測:get

if(!(otherObject instanceof ClassName))
    return false;

  5.  將otherObject轉換爲相應的類類型變量:class

ClassName oher = (ClassName) otherObject;

  6.  如今開始對全部須要比較的域進行比較了。使用 == 比較基本類型域,使用equals比較對象域。若是全部的域都匹配,就返回true,不然返回false。變量

return field1 == other.field1 && field2.equals(other.field2) && ...;

若是在子類中從新定義equals,就要在其中包含調用super.equals(other)。引用

相關文章
相關標籤/搜索