Как известно, метод equals() определен в классе java.lang.Object
. Его реализация в данном классе, это простое сравнение ссылок, и если ссылки разные, то метод возвращает false.
Если Вы хотите переопределить данный метод, не стоит забывать о контракте с методом hashCode()
. Согласно данному контракту, если equals() возвращает true, то значение hashCode()
для этих объектов будет одинаково, но выполнение обратного необязательно.
Есть еще один контракт, о котором стоит помнить при написании своего собственного метода equals()
:
- Он должен быть рефлексивный, т.е. для любых значений x,
x.equals(x)
должен возвращать всегдаtrue
- Метод должен быть симметричен: для любых значений x и y, если
x.equals(y) == true
должно выполнятьсяy.equals(x) == true
- Должно выполняться условие транзитивности: если
x.equals(y)
== true иy.equals(z) == true
, тоx.equals(z) == true
- Консистентность — это значит, что метод будет возвращать одно и тоже значение, независимо от того, сколько раз его вызвали, до тех пор, пока состояние объектов, для которых он вызывается, не изменено.
- И последнее, для всех
null
значений метод должен возвращать false —x.equals(null) = false
Ссылка на доки
Пейте кофе, пишите на java 😉
0