在 Java 中,HashMap、HashSet 等基于哈希的数据结构在存储对象时会先调用对象的 hashCode() 方法来决定存放的桶位置,然后再通过 equals() 方法确认对象是否相同。
如果我只重写了 equals() 而没有重写 hashCode(),那么两个逻辑上相等的对象(equals() 返回 true)可能会有不同的 hashCode 值,导致它们被放入不同的桶中,最终无法正确识别为相同对象。
这会造成如:HashSet 无法去重、HashMap 无法覆盖键值、查找失败等问题。
所以根据 Java 的规范:如果两个对象通过 equals() 判断相等,它们的 hashCode() 必须也相等。
为了保证哈希结构的正确性,重写 equals() 方法时必须同时重写 hashCode() 方法。