Objects.equals и Object.equals

Я пытаюсь создать класс кортежа, который допускает подобную кортежу структуру в Java. Общий тип для двух элементов в кортежах - это X и Y соответственно. Я пытаюсь переопределить правильные значения для этого класса.

Thing is, я знаю, что Object.equals попадают в дефолт, который он по-прежнему сравнивает на основе ссылок типа "==", поэтому я не уверен, что могу это использовать. Я посмотрел на Объекты, и в нем есть equals(). До сих пор ли он сравнивается по ссылкам или сравнивается с содержанием?

Быстро вообразил оператор return как-то вроде:

return Objects.equals(compared.prev, this.prev) && Objects.equals(compared.next, this.next);

где prev и next являются элементами кортежа. Будет ли это работать?

Ответы

Ответ 1

Разница заключается в том, что Objects.equals() считает два нуля равными. Псевдокод:

  • если оба параметра null return true
  • если точно один параметр null return false
  • возвращает результат вызова метода equals() первого параметра, передающего ему второй параметр

Такое поведение означает, что оно "небезопасно".

Ответ 2

Objects.equals просто вызывает его первый аргумент метод .equals. В java, если вы хотите проверить на равенство в экземплярах класса, который вы сделали, вам придется переопределить метод equals. instance.equals() использует только ==, если тип экземпляра не переопределяет метод equals.