编写 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);
}
}