38. Правила переопределения equals()

38. Правила переопределения equals()

UNKNOWN
  1. Использование оператора == для проверки, является ли аргумент ссылкой на указанный объект. Если является, возвращается true. Если сравниваемый объект == null, должно вернуться false.
  2. Использование оператор instanceof и вызова метода getClass() для проверки, имеет ли аргумент правильный тип. Если не имеет, возвращается false.
  3. Приведение аргумента к правильному типу. Поскольку эта операция следует за проверкой instanceof она гарантированно будет выполнена.
  4. Обход всех значимых полей класса и проверка того, что значение поля в текущем объекте и значение того же поля в проверяемом на эквивалентность аргументе соответствуют друг другу. Если проверки для всех полей прошли успешно, возвращается результат true, в противном случае - false.
  5. По окончанию переопределения метода 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()? Проблемы?

Все вопросы по теме: список

Все темы: список

Вопросы/замечания/предложения/нашли ошибку: напишите мне

Report Page