Sobes.tech
Back to questions
Junior — Middle
67

Объясните различия между методами equals() и hashCode() в Java и зачем они нужны вместе.

Companies where asked
Ozon FreshOzon Fresh

Answer from AI

sobes.tech AI

Методы equals() и hashCode() в Java связаны с сравнением объектов и их использованием в коллекциях.

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

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

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

Пример:

class Person {
    String name;
    int age;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Person)) return false;
        Person p = (Person) o;
        return age == p.age && name.equals(p.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
}

Здесь equals() сравнивает поля, а hashCode() возвращает хэш на основе тех же полей, что обеспечивает согласованность.