Да, приходилось. Переопределение equals()
необходимо для корректного сравнения объектов по их содержимому, а не только по ссылке.
Типичные причины для переопределения:
Point
, Date
, пользовательские DTO).HashSet
, HashMap
, ArrayList.contains()
).При переопределении equals()
, необходимо соблюдать контракт:
x.equals(x)
должно быть true
.x.equals(y)
true
, то y.equals(x)
тоже должно быть true
.x.equals(y)
true
и y.equals(z)
true
, то x.equals(z)
тоже должно быть true
.x.equals(y)
должен давать один и тот же результат, если объекты не изменялись.null
: x.equals(null)
должно быть false
.Важно: При переопределении equals()
, обязательно нужно также переопределить hashCode()
, чтобы сохранить общий контракт между этими методами. Если два объекта равны по equals()
, их hashCode()
должен быть одинаковым. Обратное неверно.
Пример базового переопределения:
java
Да, приходилось. Переопределение equals()
необходимо для корректного сравнения объектов по их содержимому, а не только по ссылке.
Типичные причины для переопределения:
Point
, Date
, пользовательские DTO).HashSet
, HashMap
, ArrayList.contains()
).При переопределении equals()
, необходимо соблюдать контракт:
x.equals(x)
должно быть true
.x.equals(y)
true
, то y.equals(x)
тоже должно быть true
.x.equals(y)
true
и y.equals(z)
true
, то x.equals(z)
тоже должно быть true
.x.equals(y)
должен давать один и тот же результат, если объекты не изменялись.null
: x.equals(null)
должно быть false
.Важно: При переопределении equals()
, обязательно нужно также переопределить hashCode()
, чтобы сохранить общий контракт между этими методами. Если два объекта равны по equals()
, их hashCode()
должен быть одинаковым. Обратное неверно.
Пример базового переопределения:
java
Зарегистрируйтесь или войдите, чтобы получить доступ к полным ответам на все вопросы из банка вопросов.