1. 程式人生 > 實用技巧 >Java:equals詳解

Java:equals詳解

在Java庫中包含150多個 equals 方法的實現,包括使用 instanceof 檢測、呼叫 getClass 檢測、捕獲 ClassCastException 或者什麼也不做。

String類中的 equals() 方法可以通過檢測兩個字串的引用、型別、長度、字元等是否相同,來判斷兩個字串是否相等。

切記:不要用 == 來比較兩個字串, == 只能確定兩個字串是否在一個位置。如果通過 new 的方式給String賦值的話,就可能會出錯。

Object這個始祖類中的 equals 方法用於檢測一個物件是否等於另一個物件,主要是判斷兩個物件是否有相同的引用。如果我們在子類中定義equals方法時,會先呼叫超類的equals 方法,失敗則不能相等;如果超類檢測所有的域都相等,在比較子類的例項域。

我們平時遇到的 equals 方法比較的兩種情況:

  • 在沒有重寫 Object的 equals 方法時,我們使用 equals 方法,判斷兩個物件是否相等就相當於 “==”。
  • 在重寫 equals 後,通常,我們會將其複寫成:兩個物件內容相同時,返回true,否則就是false。

因此,博主編寫了一個儘可能顯得完美的 equals 方法:

1 public boolean equals(Object otherObject){
  2         //檢視引數是否為空,如果為空,返回false
  3         if(otherObject == null) return false
; 4 5 //檢視兩個物件是否有同一個引用 6 if(this != otherObject) return false;//如果沒有重寫Object類中的equals方法 時,判斷兩個物件是否相等就等同於 “==” 7 8 //檢視兩個物件是否屬於同一個類 9 if(getClass() != otherObject.getClass()) return false; 10 11 //判斷物件是不是由我們瞭解的那個類建立的物件 12 //instanceof是Java中的二元運算子,左邊是物件,右邊是類;當物件是右邊類或子類所建立物件時,返回true;否則,返回false。
13 if(!(otherObject instanceof ClassName)) return false; 14 15 //將otherObject強行轉換為相應的類型別,對需要比較的域進行比較。 == 比較基本型別域, 使用equals比較物件域。 16 //如果所有的域都相等,則返回true,否則就是false 17 ClassName other.field1 && Objects.equals() = (ClassName)otherObject; 18 return field1 == other.field1 19 && Objects.equals(field2,other.field2) 20 && ...; 21 22 }

博主是個初學者,有些不足之處還請指出,謝謝。