Java 中 equals 和 hashCode 的正确理解
Java 里判断对象是否相等,不能只看 ==。== 比较的是引用地址,equals 通常表示业务意义上的相等。只要重写 equals,一般也要重写 hashCode,否则对象放进 HashMap、HashSet 这类集合后会出现很难排查的问题。
一个最小例子
public class User { |
为什么 hashCode 也要改
HashSet 判断元素是否重复时,会先看 hashCode,再看 equals。如果两个对象 equals 相等,但 hashCode 不一样,它们可能会被放到不同桶里,集合就会认为它们不是同一个对象。
验证方式
写一个简单测试:创建两个 id 相同的 User,放进 HashSet,最后 size 应该是 1。
Set<User> users = new HashSet<>(); |