在 Java 中,equals()
方法用于比較兩個(gè)對(duì)象是否相等
重寫(xiě) equals()
方法時(shí),請(qǐng)確保遵循以下規(guī)則:
在實(shí)現(xiàn) equals()
方法時(shí),通常需要比較對(duì)象的屬性??梢允褂?==
運(yùn)算符比較基本數(shù)據(jù)類型(如 int、float、double 等),使用 equals()
方法比較引用數(shù)據(jù)類型(如 String、Date 等)。
當(dāng)重寫(xiě) equals()
方法時(shí),還需要重寫(xiě) hashCode()
方法。這是因?yàn)樯⒘斜恚ㄈ?HashMap、HashSet 等)依賴于 hashCode()
方法來(lái)存儲(chǔ)和檢索對(duì)象。如果兩個(gè)對(duì)象相等(即 equals()
方法返回 true),那么它們的 hashCode()
方法必須返回相同的值。
以下是一個(gè)示例,展示了如何在 Java 類中正確地實(shí)現(xiàn) equals()
方法:
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
Person person = (Person) obj;
if (age != person.age) {
return false;
}
return name != null ? name.equals(person.name) : person.name == null;
}
@Override
public int hashCode() {
int result = name != null ? name.hashCode() : 0;
result = 31 * result + age;
return result;
}
}
在這個(gè)示例中,我們創(chuàng)建了一個(gè)名為 Person
的類,其中包含 name
和 age
屬性。我們重寫(xiě)了 equals()
方法來(lái)比較兩個(gè) Person
對(duì)象是否相等,同時(shí)還重寫(xiě)了 hashCode()
方法。