Sobes.tech
Back to questions
Junior — Middle
81

Каковы основные принципы связи между методами equals и hashCode в Java?

Companies where asked
Dogma
ПромсвязьбанкПромсвязьбанк
ПСБ
Uzum
Ozon FreshOzon Fresh
RutubeRutube

Answer from AI

sobes.tech AI

Основные принципы связи между equals и hashCode в Java:

  • Если два объекта равны по equals, то их hashCode должен быть одинаковым.
  • Если hashCode двух объектов различен, то equals обязательно должен вернуть false.
  • Если equals возвращает false, hashCode может совпадать, но это нежелательно, так как ухудшает производительность хеш-структур.

Это обеспечивает корректную работу коллекций, использующих хеширование (HashMap, HashSet), где hashCode определяет корзину, а equals — точное сравнение объектов.

Пример:

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

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

Здесь equals и hashCode основаны на одном и том же поле id, что обеспечивает их согласованность.