Как equals работает в Java

«Как equals работает в Java» — вопрос из категории Java, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Метод equals() в Java используется для сравнения объектов на логическую эквивалентность (по содержимому), в отличие от ==, который сравнивает ссылки.

Контракт equals():

  1. Рефлексивность: x.equals(x) → true
  2. Симметричность: если x.equals(y), то y.equals(x)
  3. Транзитивность: если x.equals(y) и y.equals(z), то x.equals(z)
  4. Консистентность: повторные вызовы equals() должны возвращать одинаковый результат
  5. Сравнение с null: x.equals(null) → false

Пример:

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

Важно:

  • Всегда переопределяйте hashCode(), если переопределяете equals() (иначе нарушится контракт для HashMap, HashSet).
  • Используйте Objects.equals() для безопасного сравнения строк и nullable-полей.