重載Object類的equals函數

在java中不能由用戶重載 “==”操作符,只能重載Object類的equals函數。這裏列出了重載時的一般流程和注意事項:(引自Core Java 2)

 

在這裏主要關心父類(Employee)和兩個子類(Manager和Saler)的equals函數,可見在父類中定義equals函數主要有5步(已在代碼中標出),在子類中則有兩步。一般這些步驟最好都不要省略。

這裏有一點需要注意:即在step3有兩個方案,這兩個方案到底選擇哪個有一個準則可供參考。

 

> 若子類需要自己的equals函數,爲了滿足“相等”的對稱性,必須使用getClass();

> 若父類已經完全決定了equals的定義,使用instanceof。且對equals使用final修飾

 

另外,在Java中要求若x.equals(y)成立,則x.hashCode() == y.hashCode(),Object中默認的hashCode返回的是對象的內存地址,不同的對象一般不同,所以在定義了equals函數後不要忘記同時定義hashCode函數。常用的方案如下:

 

 

發佈了28 篇原創文章 · 獲贊 13 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章