1.顯示參數命名爲otherObject,稍後須要將它轉換成另外一個叫作other的變量。數組
2.檢測this與otherObject是否引用同一個對象:優化
if(this==otherObject) return true;this
這條語句只是一個優化。實際上,這是一種常常採用的額形式。由於計算這個燈飾要比一個一個地比較類中的域所付出的代價小不少。對象
3.檢測otherObject是否爲null,若是爲null,返回false。這項檢測是很必要的ip
if(otherObject==null) return false;get
4.比較this與otherObject是否輸入同一個類。若是equals的語意在每一個子類中有所改變,就要使用geiClass檢測變量
if(getClass()!=otherObject.getClass()) return false;object
若是全部的自雷都擁有統一的語意,就使用instanceof檢測引用
if(!(otherObject instanceof ClassName)) return false;方法
5將otherobject 轉換爲相應的類類型變量
ClassName other =(ClassName) otherObject;
6.如今開始對全部須要比較的域進行比較了。使用==比較基本類型域,使用equals比較對象域。若是全部的域都匹配,就返回true.不然返回false
return field1==other.field1&& Objects.equals(field2,other.field2)&.....;
若是在子類中從新定義equals,就要在其中包含調用super.equals(other)
tips:對於數組類型的域,能夠使用靜態的Arrays.equals方法檢測相應的數組元素是否相等