为什么要重写
- Object类的equals()方法比较的是对象的引用(即内存地址)。如果我们希望根据对象的属性来判断相等性,就需要重写equals()方法。
- 如果不重写hashCode(),不同的对象可能会被认为相等,这会导致集合中出现重复元素或查找失败。
- 如果两个对象通过equals()方法被认为相等,那么它们的hashCode()方法必须返回相同的整数值。重写这两个方法时,必须确保它们的一致性。
重写示例
主要是将obj与本类属性进行equals,将属性进行hash
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;
// int用==更高效,String用equals比较值
return age == person.age && name.equals(person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}