一、equals()方法介紹
Java中的equals()方法是Object類中的方法,其作用是用來比較兩個對象是否相等。在默認情況下,equals()方法是通過比較兩個對象的內存地址是否相等來判斷兩個對象是否相等的,即使兩個對象的屬性值完全相同,但如果它們的內存地址不同,equals()方法也會返回false。
為了實現按照對象屬性值比較對象是否相等的功能,我們可以自己在類中重寫equals()方法並自定義對象的比較規則。
二、equals()方法重寫規則
在重寫自定義類的equals()方法時,需要遵循以下幾個規則:
1、自反性:對於任何非null的引用值x,x.equals(x)必須返回true。
2、對稱性:對於任何非null的引用值x和y,如果x.equals(y)返回true,則y.equals(x)也必須返回true。
3、傳遞性:對於任何非null的引用值x、y和z,如果x.equals(y)返回true,並且y.equals(z)也返回true,則x.equals(z)也必須返回true。
4、一致性:對於任何非null的引用值x和y,多次調用x.equals(y)應該返回相同的結果,也就是說,在對象的比較過程中,不受外界因素影響。
5、非空性:對於任何非null的引用值x,x.equals(null)必須返回false。
三、equals()方法示例代碼
public class Person { private String name; private int age; //構造方法 public Person(String name, int age) { this.name = name; this.age = age; } //重寫equals()方法 @Override public boolean equals(Object obj) { if (obj == null) { return false; } if (this == obj) { return true; } if (obj instanceof Person) { Person p = (Person) obj; if (this.name.equals(p.name) && this.age == p.age) { return true; } } return false; } } public class TestEquals { public static void main(String[] args) { Person p1 = new Person("Tom", 20); Person p2 = new Person("Tom", 20); Person p3 = new Person("Jack", 22); //比較p1和p2是否相等 if (p1.equals(p2)) { System.out.println("p1和p2相等"); } else { System.out.println("p1和p2不相等"); } //比較p1和p3是否相等 if (p1.equals(p3)) { System.out.println("p1和p3相等"); } else { System.out.println("p1和p3不相等"); } } }
四、equals()方法注意事項
1、重寫equals()方法時,一定要同時重寫hashCode()方法,否則可能會導致HashMap等集合類無法正常工作。
2、重寫equals()方法時,一定要注意空值判斷,否則可能會出現空指針異常。
3、重寫equals()方法時,使用instanceof關鍵字來判斷傳入的對象是否為本類對象,這樣可以避免強制類型轉換時的ClassCastException異常。
4、如果需要比較多個屬性值,建議使用Objects類的equals()方法或使用自定義的比較工具類比較。
五、總結
Java中的equals()方法在對象比較中是非常常見的,雖然默認比較方式只能比較內存地址,但是通過重寫equals()方法可以實現自定義對象比較規則,從而使程序更加靈活和方便。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/234086.html