在Java中,當你重寫一個對象的hashCode()方法時,需要確保滿足以下幾點:
下面是一個簡單的示例,展示了如何為一個自定義類重寫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 (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
Person person = (Person) obj;
return age == person.age && Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
在這個示例中,我們首先檢查兩個Person對象是否是同一個對象(this == obj
),如果是,則返回true。接下來,我們檢查傳入的對象是否為null或者它們的類是否相同,如果滿足這些條件,則返回false。然后,我們將傳入的對象強制轉換為Person類型,并比較它們的name和age屬性是否相等。如果它們相等,則返回true,否則返回false。
在hashCode()方法中,我們使用Java的Objects.hash()方法來生成一個基于name和age屬性的整數哈希值。這樣,如果兩個Person對象的name和age屬性相等,那么它們的hashCode()方法將產生相同的值,從而滿足上述hashCode()方法的要求。