Доброго времени суток!
В данной задаче вызывается метод equals класса Object и по своей сути он же должен сравнивать ссылки на объекты, а не содержимое ( аналогично простому ==) и для корректной работы нужно его переопределять, но в данной задаче нет кода переопределения @Override. В связи с этим возникает вопрос "Почему?"
Объясните, пожалуйста
Vasily Dia
16 уровень
Почему в данной задаче не нужно переопределять метод equals?
Обсуждается
Комментарии (7)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Skotique
22 июня 2023, 01:21
я хотел задать точно такой же вопрос, но увидел этот
0
Vasily Dia
20 августа 2022, 20:21
public class Solution {
static Integer first = 1000;
static Integer second = 1000;
static int third = 1000;
public static void main(String[] args) {
System.out.println(first.equals(second));
System.out.println(third == second);
System.out.println(third == first);
}
}
0
KIRAРазработчик в prosv.ruExpert
20 августа 2022, 20:28
Вы используете класс Integer, его разработчики определили equals()
+6
Skotique
22 июня 2023, 01:25
ну, переопределили, там то же самое ==
а смысл? почему это работает?
у стринга переопределение более внушительное
0
Skotique
22 июня 2023, 01:30
насколько я понимаю, переопределенный equals для Integer распаковывает содержимое коробочек и тупо сравнивает их через ==
поэтому equals и работает, сравнивая не ссылки, а value.
Я разобравси, можно закрывать
+1
Ulukay
20 июля 2023, 23:17
вота этот переопредёленыш в классе Integer:
Метод выясняет, принадлежит ли переданный аргумент классу Integer и если да, то распаковывает его в примитивный int и сравнивает c полем value сравниваемого объекта класса Integer. Так же переданный в параметр метода примитив int тоже проходит проверку, так как тоже принадлежит классу Integer.
Например:
Выведет в консоль: class java.lang.Integer
И, как понимаю, компилятор написан так, что он определяет какой тип(класс) объекта (того, что перед .equals()) сравнивается и вызывает метод equals этого класса. Ну а c Integer'ом уже понятно, там этот equals переопределен.
_____________________________________
И int third так же при распаковке выводит значение в консоль: 1000
Вроде тоже разобравси.
0
KIRAРазработчик в prosv.ruExpert
20 августа 2022, 20:05
Код не прикрепили
+1