编写 equals 和 hashcode
约 173 字小于 1 分钟
2024-08-08
重写 equals 时必须重写 hashCode 方法
原因
如果我们将对象的 equals 方法重写而不重写 hashcode,当我们再次 new 一个新的对象的时候,equals 方法返回的是 true,但是 hashCode 方法返回的就不一样了,如果需要将这些对象存储到结合中(比如:Set,Map ...)的时候就违背了原有集合的原则
栗子
public class Person {
private String name;
private Integer age;
@Override
public boolean equals(Object obj) {
if (obj instanceof Person) {
Person p = (Person) obj;
return Objects.equals(this.name, p.name) && this.age == p.age;
}
return false;
}
@Override
public int hashCode() {
// hashCode()方法可以通过Objects.hashCode()辅助方法实现
return Objects.hash(name, age);
}
}