在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函數。常用的方案如下: