Переопределять equals()
, только если это имеет смысл. Но очевидно, что если вы переопределяете equals()
, вам нужно убедиться, что контракт hashcode()
не нарушен, то есть, если два объекта равны, они должны иметь одинаковый хэш-код.
Когда это имеет смысл? Когда Object.equals()
недостаточно. Этот метод в основном сводится к ссылочной идентичности, то есть два объекта - это один и тот же объект, поэтому:
a.equals(b) iff q == b
Числа являются очевидным примером, когда это имеет смысл, потому что Integer(10)
должен равняться другому Intger(10)
.
Другим примером может быть ситуация, когда вы представляете записи базы данных. Допустим, у вас есть записи Стьюдента с уникальным целочисленным идентификатором, тогда может быть достаточной реализацией equals для простого сравнения полей идентификатора.