Два айфона

  • 11
  • Недоступна
В методе main создаются два айфона с одинаковыми параметрами. В консоли выводится результат их сравнения. Разберись, почему сейчас результат отрицательный и сделай так, чтобы он был положительным. Для этого тебе нужно переопределить метод equals(Iphone), который будет учитывать все параметры. У двух
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (49)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
dimask
Уровень 11, Санкт-Петербург
около 5 часов назад
Лекция ужасная не фига не понятно. мой совет: 1-https://javarush.ru/groups/posts/2179-metodih-equals--hashcode-praktika-ispoljhzovanija?post=full#discussion читайте. 2-Дальше надо понять, что сравнении разных объектов одного класса, надо делать переопределение. пишим код и потом в idea alt+insert equals+hashcode, выбираем по каким полям будем сравнивать объект и все ок
Александр Огарков
Уровень 28, Мытищи, Россия
2 января, 15:02
Валидатор требует проверку на null не только объекта, но и его полей. поля сравниваются либо так:
this.model != null && this.model.equals(anotherIphone.model)
либо так (что, по сути, то же самое):
Objects.equals(this.model, anotherIphone.model)
Artem.A. #2833122
Уровень 18, Новосибирск, Russian Federation
23 ноября 2021, 14:28
Коллеги, объясните, пожалуйста, момент связанный с equals и == . Почему если в этой задаче проигнорировать рекомендации лекции по использованию метода equals для типа String совместно с проверкой на null, а просто тупо использовать == , то всё работает зашибись, требует пары строчек и проходит валидатор ? Если делать способом как в лекции (пункт 4, абзац "Но и это еще не все."), то придётся городить огромную кучу отдельных логических выражений в кучу строк причём длинных. P.S. Кстати меня валидатор пропустил, когда решение было неверным. Не выдавал true для случая String == null у двух разных объектов))
SoSed
Уровень 27, Киев, Ukraine
18 декабря 2021, 10:55
Спасибо, мил человек! Долго бы ещё чесал репу, в чём ошибка? Действительно, если заменить equals на ==, валидируется)
Лик Вадим
Уровень 16, Москва, Russian Federation
2 января, 21:45
Тоже ломал голову над этим вопросом. Предполагаю что причина в том что в случае если в методе equals сравниваются объекты, один из которых имеет нулевую ссылку - выбрасывается исключение NullPointerException. И что бы проходил вариант с equals нужно было выше в методе предусмотреть такие варианты для всех случаев по типу: if (this.model == null) return false; if (this.color == null) return false; и то же самое для полей сравниваемого Object. Ну а с == таких проблем нет. Там есть проблема что таким образом ( == ) нельзя сравнивать ссылки на отдельно создаваемые объекты - они не будут равны. А вот переменные объектов - являются примитивами (поправьте меня если ошибаюсь) и потому их так сравнивать можно - в памяти они хранят один ссылочный адрес в пуле StringPool.
MerryAnn
Уровень 14, Roma, Italy
8 ноября 2021, 12:23
https://javarush.ru/groups/posts/1340-peregruzka-metodov-equals-i-hashcode-v-java мне очень помогло
Sasha Dokuchaev Работает в Andersen
17 ноября 2021, 12:12
Спасибо!
Pablic TaxiDriver в Яндекс
8 ноября 2021, 00:21
Rikki Nadir
Уровень 29, Москва
2 ноября 2021, 14:20
Знаете ли вы или нет, но в ИДЕА есть автогенерация, в частности, иквелзов, так вот по мнению ИДЕи это должно выглядеть как return price == iphone.price && model.equals(iphone.model) && color.equals(iphone.color); и с этим вроде не поспоришь, первое поле (инт) можно сравнить оператором ==, два остальных поля -- стринги, у стринга есть свой нормальный иквелз. Однако валидатор не пропускает! А авторы считают, что правильно return price == iphone.price && Objects.equals(model, iphone.model) && Objects.equals(color, iphone.color); Разве так правильнее?? Мне больше нравится, как ИДЕА сделала, кто-нибудь разубедит??..
Сергей Коваленко
Уровень 29, Краснодар
22 ноября 2021, 08:35
Objects.equals() проверяет на == null.
MalinaS
Уровень 17, Russian Federation
29 ноября 2021, 17:44
Согласен, тоже не могу понять чем не нравится валидации return price == iphone.price && model.equals(iphone.model) && color.equals(iphone.color); Работает отлично!!!
Александр Огарков
Уровень 28, Мытищи, Россия
2 января, 15:10
попробуй изменить создание первого объекта на такой код, программа упадёт:
Iphone iphone1 = new Iphone(null, "Black", 999);
Vlad Alexandrov
Уровень 17, Russian Federation
31 октября 2021, 12:39
https://javarush.ru/groups/posts/2179-metodih-equals--hashcode-praktika-ispoljhzovanija?post=full#discussion Статься по equals и hashCode читай и сразу все станет понятно
29 октября 2021, 04:33
А почему тут надо было сравнивать через ==, а не через equals?
Иванов Дмитрий
Уровень 29, Борисоглебск, Russian Federation
30 октября 2021, 07:58
ооо! Спасибо за подсказку))) Тоже мучался с equals (как в ЛЕКЦИЯХ!), а решение прошло только с оператором сравнения == Ничерта не понятно😵
Mikhaylo
Уровень 11, Харьков , Украина
13 октября 2021, 10:20
Долбануться можно. С айфонами решил, но не так как в правильном ответе (через instanceof как в лекции), но решение приняло, что меня совсем сбило с толку. Очень тяжело далась эта задача. После этого ожидал подвоха в задаче прохэшкод, но там всё оказалось черезчур просто. Рекомендую видосы и статьи которые есть в коментариях - они помогут вам лучше разобраться в вопросе.
Konstantin Medical Interpreter в Hospital
7 октября 2021, 05:43
/* return price == айфон.прайс && модель.равна(айфон модель) && цвет.равен(iайфон цвет) && первоначальная версия решения */
А почему это решение не подходит, сижу и думаю, в решении было использовано, слово Object"S" хотя изначально оно в коде не фигурирует. 1. не приводит ли это к изменению изначального паттерна написания кода ? 2. увеличивает ли скорость выполнения программы ?