Как известно, метод 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 значений метод должен возвращать falsex.equals(null) = false

Ссылка на доки
Пейте кофе, пишите на java 😉