一、equals方法簡介
在Java中,equals方法是用來判斷兩個對象是否相等的一個重要方法。在默認情況下,equals方法與“==”運算符的行為相同,即判斷是否是同一個對象。但在實際開發中,經常需要對自定義類對象進行相等判斷,這時就需要對equals方法進行重寫了。
二、如何正確重寫equals方法
正確重寫equals方法需要滿足以下幾個條件:
1、自反性:對於任意的非空引用x,x.equals(x)應該返回true。
2、對稱性:對於任意的非空引用x和y,如果x.equals(y)返回true,則y.equals(x)也應該返回true。
3、傳遞性:對於任意的非空引用x、y和z,如果x.equals(y)返回true,y.equals(z)返回true,則x.equals(z)也應該返回true。
4、一致性:對於任意的非空引用x和y,在沒有改變x和y的情況下,多次調用x.equals(y)應該返回相同的結果。
5、非空性:對於任意的非空引用x,x.equals(null)應該返回false。
三、equals和hashCode的關係
equals和hashCode是兩個重要的方法,它們之間存在着密切的關係。在正確實現equals方法的基礎上,還需要正確實現hashCode方法,以保證在使用HashSet、HashMap等集合時,能夠正確地判斷對象是否相等。
在實現equals方法時,如果兩個對象equals返回true,但hashCode不相等,則HashSet、HashMap等集合會認為這兩個對象不相等,因此可能會產生一些難以預料的錯誤。因此,正確實現hashCode方法是保證程序正常運行的必要條件。
四、equals方法的實現示例
public class Person {
private String name;
private int age;
private String gender;
// 構造方法
// 單獨實現equals方法
public boolean equals(Object obj) {
// 如果是同一個對象,直接返回true
if(this == obj) {
return true;
}
// 如果是null,返回false
if(obj == null) {
return false;
}
// 如果不是同一個類,返回false
if(this.getClass() != obj.getClass()) {
return false;
}
// 強制類型轉換
Person person = (Person) obj;
// 比較屬性值是否相等
if(this.name.equals(person.name) && this.age == person.age && this.gender.equals(person.gender)) {
return true;
}
return false;
}
// 單獨實現hashCode方法
public int hashCode() {
return Objects.hash(name, age, gender);
}
}
五、equals方法的參數類型
在實現equals方法時,需要注意參數類型。由於Object是所有類的父類,在重寫equals方法時需要使用Object類型的參數來覆蓋父類的方法。在方法內部需要判斷參數的類型是否與當前類相同,如果不同,直接返回false即可。
另外,需要注意的是,當需要比較的對象可能是null時,需要額外進行判斷,避免NullPointerException的發生。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/243655.html
微信掃一掃
支付寶掃一掃