Описание тега equals

Ссылается на метод Java equals, указывающий, "равен ли какой-то объект" этому.

Общее введение:

equals() определен вjava.lang.Objectclass, от которого происходят все остальные классы, поэтому он автоматически определяется для каждого класса. Однако он не выполняет интеллектуального сравнения для определенных пользователем классов, если они его не отменяют. Если он не определен для (пользовательского) класса, он ведет себя так же, как оператор равенства==, который сравнивает равенство ссылок в Java.

В equals() Метод реализует отношение эквивалентности для ненулевых ссылок на объекты:

  1. Это рефлексивно: для любого ненулевого ссылочного значения x x.equals(x) должен возвращать true.
  2. Он симметричен: для любых ненулевых ссылочных значений x и y x.equals(y) должен возвращать true тогда и только тогда, когда y.equals(x) возвращает true.
  3. Это транзитивно: для любых ненулевых ссылочных значений x, y и z, если x.equals(y) возвращает true, а y.equals(z) возвращает true, то x.equals(z) должен возвращать true.
  4. Он согласован: для любых ненулевых ссылочных значений x и y несколько вызовов x.equals(y) последовательно возвращают true или последовательно возвращают false, при условии, что никакая информация, используемая в равных сравнениях для объектов, не изменяется.
  5. Для любого ненулевого ссылочного значения x x.equals(null) должен возвращать false.

Следовательно, если какой-либо пользовательский класс переопределяет equals() метод, то он должен соответствовать вышеуказанным критериям для правильной реализации.

Обратите внимание, что обычно необходимо переопределить метод hashCode() всякий раз, когда этот метод переопределяется, чтобы сохранить общий контракт дляhashCode(), в котором говорится, что одинаковые объекты должны иметь одинаковые хэш-коды.


Дальнейшее чтение:

  1. Javadoc дляequals().

  2. Ответы Stackru: переопределение equals и hashCode в Java, Java равно для класса. Является == таким же, как.equals, Java: equals и == и должен быть переопределен метод equals(Object) при переопределении hashCode() в java.