或“为什么 Sun/Oracle 的人每次都强迫我们同时覆盖 equals() 和 hashCode()?”
每个人都知道,如果你覆盖一个对象的 equals() 或 hashCode(),你也必须覆盖另一个,因为这两者之间有一个契约:
请注意,每当重写此方法 [即 equals()] 时,通常都需要重写 hashCode 方法,以维护 hashCode 方法的一般约定,即相等的对象必须具有相等的哈希码。-- Object.equals() 的 API 文档
为什么它不在 Object 类中以这种方式实现:
public boolean equals(Object obj) {
return this.hashCode() == obj.hashCode()
}
如果他们这样做,它将使世界其他地区免于实施这两种方法。只覆盖 hashCode() 就足够了。
我想这些家伙有充分的理由不这样做。我只是看不到它-请为我解决这个问题。