對上週考試中重寫equals方法的理解,
public boolean equals(Object object) { if (this == object) return true; if (object == null || getClass() != object.getClass()) return false; if (!super.equals(object)) return false; Book book = (Book) object; return java.util.Objects.equals(name, book.name) && java.util.Objects.equals(publisher, book.publisher); }
1、第一行是equals()方法的方法頭,參數爲Object object,Object類是所有類的直接或間接父類,因此 Object + 參數名稱 代表任何繼承Object的實例,即任何一個對象。使形參的範圍更廣,使用更便利。
2、第二行是對兩對象的地址進行比較,其中 this 指當前對象自身,即誰調用 equals 誰便是 this 。object 是一個形參,下面會賦值給它。如果兩者地址相等,則兩個對象一定相等。
3、第三行是對兩對象所屬類進行比較,其中 getclass()是得到這個對象的類型類(舉例來說就是:獲得int long boolean等等這些類型)。 getclass() 方法作用是:獲得了(類)Class,進而通過返回的Class對象獲取Person的相關信息。如果object指向一個空對象或者兩個對象類型不同,則可以直接判斷出兩對象不等。
4、第四行是如果它的父類和object也不等的話就可判讀兩對象不等。