Java 来自多个字段的hashCode

Java hashCode from multiple fields

给定一个 class 像这样:

class MyObject {
  private String id1;
  private String id2;

  @Override
  public boolean equals(Object o) {
    if (o == this) return true;
    if (!(o instanceof MyObject)) {
        return false;
    }
    MyObject other = (MyObject) o;
    return id1.equals(other.id1) || id2.equals(other.id2);
  }
}

请注意,相等性不取决于两个字段是否匹配,任何一个字段都有效。对于此 class,什么是合适的 hashCode 实施?

这不是 equals 的有效实施。

具体来说,它违反了传递性要求。

因此,除了使所有实例具有相同的哈希码之外,您也无法实现 hashCode "correctly"。