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.