38. Правила переопределения equals()
UNKNOWN- Использование оператора == для проверки, является ли аргумент ссылкой на указанный объект. Если является, возвращается true. Если сравниваемый объект == null, должно вернуться false.
- Использование оператор instanceof и вызова метода getClass() для проверки, имеет ли аргумент правильный тип. Если не имеет, возвращается false.
- Приведение аргумента к правильному типу. Поскольку эта операция следует за проверкой instanceof она гарантированно будет выполнена.
- Обход всех значимых полей класса и проверка того, что значение поля в текущем объекте и значение того же поля в проверяемом на эквивалентность аргументе соответствуют друг другу. Если проверки для всех полей прошли успешно, возвращается результат true, в противном случае - false.
- По окончанию переопределения метода equals() следует проверить: является ли порождаемое отношение эквивалентности рефлексивным, симметричным, транзитивным и непротиворечивым? Если ответ отрицательный, метод подлежит соответствующей правке.
@Override
public boolean equals(Object obj) { if (this == obj) // равен сам себе
return true;
if (obj == null) // не равен нулю
return false;
if (getClass() != obj.getClass()) // объекты одинакового класса
return false;
BlackBox other = (BlackBox) obj; // приведение
if (varA != other.varA) // для конкретных переменных класса
return false;
if (varB != other.varB)
return false;
return true;
}
Предыдущий вопрос: 37. Зачем нужен equals(). Чем он отличается от операции ==?
Следующий вопрос: 39. Что будет, если переопределить equals() не переопределяя hashCode()? Проблемы?
Все вопросы по теме: список
Все темы: список
Вопросы/замечания/предложения/нашли ошибку: напишите мне