Junior — Middle
120
Является ли hashCode() одинаковым для объектов, которые считаются равными с точки зрения метода equals()?
Ответ от нейросети
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().