Ответ
Метод 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 age == person.age && Objects.equals(name, person.name);
}
Важно:
- Всегда переопределять
hashCode()вместе сequals()(иначе нарушится контракт для коллекций). - Проверять тип (
instanceofилиgetClass()). - Учитывать
nullи рефлексивность/симметричность/транзитивность.