Добрый день.
При решении задачи я реализовал метод clone() для класса User через помещение в конструктор User выражения this.age, this.name
Валидатор решение принял.
Выполнение программы выдает в консоль следующее:
com.javarush.task.task21.task2107.Solution@1b6d3586
com.javarush.task.task21.task2107.Solution@4554617c
{Hubert=com.javarush.task.task21.task2107.Solution$User@817bc13d, Zapp=com.javarush.task.task21.task2107.Solution$User@2a63cf}
{Hubert=com.javarush.task.task21.task2107.Solution$User@817bc13d, Zapp=com.javarush.task.task21.task2107.Solution$User@2a63cf}
Насколько я понимаю после @ идет адрес блока памяти, который хранит ссылку на объект.
У объектов класса Solution они разные и это Ок, а у объектов Hubert и Zapp ссылки одинаковые, что насколько я понимаю означает то, что изменение в клоне данных об имени и возрасте User повлечет изменение этих данных для оригинала.
Правильно ли я понимаю, что во избежание этого необходимо получать данные для конструктора в методе User.clone() через геттер, который будет возвращать например не ссылку на поле age, а примитив int?
Юрий Зиненко
41 уровень
Задачу валидатор принял, но вопросы остались
Решен
Комментарии (8)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Юрий Зиненко
24 апреля 2022, 22:00
СПАСИБО. Все стало понятно
0
Виктор
19 июля 2022, 19:23
Дружище, так ты поставь-то ответу признак "Решение"
0
KIRAExpert
21 апреля 2022, 01:16решение
Насколько я понимаю после @ идет адрес блока памяти, который хранит ссылку на объект.
Нет, там идет хешкод
В Object такая реализация
Вопрос 2 наглядно демонстрирует, что это разные вещи.
У объектов класса Solution они разные и это Ок, а у объектов Hubert и Zapp ссылки одинаковые
Вы смотрите не на ссылки, а на хеш
Возьмем первые записи и посмотрим на хеш и равны ли ссылки
Вывод:
Хеш разный потому что не переопределили в solution
+6
Виктор
19 июля 2022, 19:23
спасибо за ответ! уже собирался задать такой же вопрос.
Но! Появился следующий: а как можно увидеть ссылку что бы сравнить её с другой? или нам остается только вариант "==" ?
0
KIRAExpert
20 июля 2022, 12:36
А зачем вам видеть ссылку, для сравнения у вас есть операторы сравнения ==, а вообще ссылочные типы данных сравнивают через equals
0
Виктор
20 июля 2022, 16:18
ну это чисто теоретический вопрос. Некоторые считают (по крайней мере я считал раньше), что вот это "@1b6d3586" что-то типа адреса в памяти. Ну и вот родился такой вопрос, про ссылку. Я понимаю, что мы ссылки сравниваем через ==, но можем ли мы их как-то увидеть?
0
KIRAExpert
20 июля 2022, 18:01
Ответ 1 и 2, во втором дан метод с помощью которого вы можете узнать адрес
+1
Виктор
20 июля 2022, 18:07
Спасибо большое! Интересные ответы! Всем рекомендую к прочтению для общего развития.
0