Sobes.tech
Назад к вопросам
Senior
6

Что такое equals и hashCode? Какая связь между ними?

Компании, где спрашивали
МТСМТС

Ответ от нейросети

sobes.tech AI

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

  • equals(Object obj) — определяет, равен ли текущий объект другому объекту. По умолчанию сравнивает ссылки (т.е. одинаковые ли объекты в памяти), но часто переопределяется для сравнения по содержимому.

  • hashCode() — возвращает целочисленное значение (хеш-код), которое используется для быстрого поиска объекта в хеш-таблицах.

Связь между equals и hashCode:

  • Если два объекта равны по equals(), то их hashCode() должны быть одинаковыми.
  • Если hashCode() у объектов разный, то equals() обязательно вернёт false.

Это важно для корректной работы коллекций на основе хеширования. Нарушение этого контракта приводит к ошибкам при поиске и хранении объектов.

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

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    MyClass myClass = (MyClass) o;
    return Objects.equals(field1, myClass.field1) &&
           Objects.equals(field2, myClass.field2);
}

@Override
public int hashCode() {
    return Objects.hash(field1, field2);
}