Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java: Общие вопросы > Метод clone() и "лишние телодвижения" |
Автор: agR 6.12.2008, 18:28 | ||
Вот стало интересно.... изменилось ли поведение метода clone() в JDK 1.6 по сравнению с 1.5. http://forum.vingrad.ru/index.php?showtopic=175052&view=findpost&p=1278412 Решил посмотреть как будет себя вести код в 1.6:
Так вот, казалось бы для "глубокого" клонирования закомментированная строка необходима, но она ровным счетом ничего не делает - результат не меняется. Может теперь при работе с методом clone() уже не надо "лишних телодвижений"? Или это я что-то не доглядел? |
Автор: _sten_ 7.12.2008, 15:55 | ||||||||
А что не так? Выводит:
я так понимаю тебя смущает то что не изменилась дата в b1 After change ??? Так все правильно. После вызова метода clone() проперти birthday класса Birthday для b2 ссылается на тот же объект что и b1(как и описано в спеке). Ты вызвал:
который выпонил метод:
то есть создал новый экземпляр класса Date и теперь проперти birthday ссылается на него. Если бы ты сделал так:
то тогда дата в b1 тоже изменилась. Метод клон создает новый объект, и делает так что бы все его проперти ссылались на те же объекты. Для дип клонирования закоменченая строка нужна и от "лишних телодвижений" никуда не дется. Проста для классов Integer, String создается впечатление что дип клонирование происходит автоматически потому что они неизменяемые. |
Автор: agR 7.12.2008, 17:04 | ||
Спасибо. Вот этот момент:
не учел. В след. раз буду внимательней ![]() |