Java完美重寫equals 方法的建議

2021-09-01 06:52:04 字數 893 閱讀 5378

下面給出編寫乙個完美的equals方法的建議:

1)顯式引數命名為otherobject,稍後需要將它轉換成另乙個叫做other的變數

2)檢測

this與otherobject是否引用同乙個物件 :if(this == otherobject) return true;

3) 檢測otherobject是否為

null ,如果為null,返回false.if(otherobject == null) return false;

4) 比較this與otherobject是否屬於

同乙個類

如果equals的語義在每個子類中有所改變,就使用getclass檢測 :if(getclass()!=otherobject.getclass()) return false;

如果所有的子類都擁有統一的語義,就使用instanceof檢測 :if(!(otherobject instanceof classname)) return false;

5) 將otherobject轉換為相應的類型別變數:classname other = (classname) otherobject;

6) 現在開始對所有需要比較的

域進行比較 。使用==比較基本型別域,使用equals比較物件域。如果所有的域都匹配,就返回true,否則就返回flase.

如果在子類中重新定義equals,就要在其中包含呼叫super.equals(other)

當此方法被重寫時,通常有必要重寫

hashcode 方法,以維護

hashcode 方法的常規協定,該協定宣告 相等物件必須具有相等的雜湊碼 。

【改寫equals方法時,總是要改寫hashcode方法】

java面試 為什麼需要重寫equals方法

預設equals在比較兩個物件時,是看他們是否指向同乙個位址的。但有時,希望兩個物件只要是某些屬性相同就認為他們的quals為true。比如 student s1 new student 1,name student s2 new student 1,name 如果不重寫equals的話,他們是不相...

重寫java底層equals

override public booleanequals object obj else 當same為true時獲取 serverlist 和 clientlist中都存在的陣列 當same為false時 獲取在clientlist中存在而在serverlist中不存在的陣列 使用這個方法需要重寫...

重寫hashCode 方法和equals 方法

1 object類中有hashcode 和equals方法 public native int hashcode 根據位址進行運算得到的偽隨機數 public boolean equals object obj a.equals b ab物件內容相同,可能是同乙個位址,這種情況hashcode一定相...