EqualsUsingHashCode
Implementing #equals by just comparing hashCodes is fragile. Hashes collide frequently, and this will lead to false positives in #equals.

Severity
WARNING
Tags
FragileCode

The problem

Don’t implement #equals using just a hashCode comparison:

class MyClass {
  private final int a;
  private final int b;
  private final String c;

  ...

  @Override
  public boolean equals(@Nullable Object o) {
    return o.hashCode() == hashCode();
  }

  @Override
  public int hashCode() {
    return Objects.hashCode(a, b, c);
  }

The number of Objects with randomly distributed hashCode required to give a 50% chance of collision (and therefore, with this pattern, erroneously correct equality) is only ~77k.

Suppression

Suppress false positives by adding the suppression annotation @SuppressWarnings("EqualsUsingHashCode") to the enclosing element.