Sobes.tech
Junior — Middle
122

Является ли hashCode() одинаковым для объектов, которые считаются равными с точки зрения метода equals()?

Answer from AI

sobes.tech AI

В Java контракт между методами equals() и hashCode() требует, чтобы если два объекта считаются равными по equals(), то у них должен быть одинаковый hashCode(). Это важно для корректной работы коллекций, таких как HashMap или HashSet.

То есть:

  • Если a.equals(b) возвращает true, то a.hashCode() == b.hashCode() должно быть true.
  • Обратное не обязательно: одинаковый hashCode не гарантирует равенство объектов.

Пример переопределения:

@Override
public boolean equals(Object obj) {
    if (this == obj) return true;
    if (obj == null || getClass() != obj.getClass()) return false;
    MyClass other = (MyClass) obj;
    return this.id == other.id;
}

@Override
public int hashCode() {
    return Objects.hash(id);
}

Таким образом, hashCode() должен быть согласован с equals().