在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()方法的要求。