在 Java 中,要覆蓋 equals
方法以滿足特定需求,你需要遵循以下步驟:
equals
方法。確保它接受一個(gè) Object
類型的參數(shù)并返回一個(gè) boolean
值。equals
方法中,首先檢查傳入的對(duì)象是否為 null
。如果是,則返回 false
。getClass()
方法或 instanceof
關(guān)鍵字進(jìn)行檢查。如果不是,則返回 false
。false
。如果所有字段都相等,則返回 true
。hashCode
方法。當(dāng)你覆蓋 equals
方法時(shí),通常也需要覆蓋 hashCode
方法,以便在使用散列數(shù)據(jù)結(jié)構(gòu)(如 HashSet
和 HashMap
)時(shí)能正確地工作。以下是一個(gè)示例,展示了如何覆蓋 equals
和 hashCode
方法:
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 (obj == null) {
return false;
}
if (!(obj instanceof Person)) {
return false;
}
Person other = (Person) obj;
return this.age == other.age && (this.name == null ? other.name == null : this.name.equals(other.name));
}
@Override
public int hashCode() {
int result = 17;
result = 31 * result + (name == null ? 0 : name.hashCode());
result = 31 * result + age;
return result;
}
}
在這個(gè)示例中,我們創(chuàng)建了一個(gè)名為 Person
的類,其中包含 name
和 age
字段。我們覆蓋了 equals
方法以比較兩個(gè) Person
對(duì)象的 name
和 age
字段。我們還覆蓋了 hashCode
方法,以便在使用散列數(shù)據(jù)結(jié)構(gòu)時(shí)能正確地工作。