|
|
|
clone() массива объектов: не понимаю, когда копирует элементы, а когда только ссылки
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Почему для этого примера: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. - вывод выглядит так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. То есть, вопрос простой: чем принципиально отличается массив BigInteger'ов от массива пользовательского класса Element, что клонирование их идёт по-разному ? Дока говорит:Object.clone()this method creates a new instance of the class of this object and initializes all its fields with exactly the content s of the corresponding fields of this object, as if by assignment; the contents of the fields are not themselves cloned . Thus, this method performs a "shallow copy" of this object, not a "deep copy" operation. Извините, но ЯНХНП! С одной стороны, утверждается, что создаётся НОВЫЙ ИНСТАНС и все его поля заполняются "with exactly the contents" (блин, как правильно перевести ?...) соотв-щих полей объекта-источника. Но тут же говорится, что содержимое полей НЕ клонируется. Пролейте свет кто-нибудь, плз.... %-/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2013, 13:52:51 |
|
||
|
clone() массива объектов: не понимаю, когда копирует элементы, а когда только ссылки
|
|||
|---|---|---|---|
|
#18+
ozzmosis, там же буквально написано, что было в поле которое вы клониурете, ровно то и будет в поле созданного инстанса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2013, 13:55:00 |
|
||
|
clone() массива объектов: не понимаю, когда копирует элементы, а когда только ссылки
|
|||
|---|---|---|---|
|
#18+
Оригинал Код: plaintext 1. 2. 3. Код: plaintext 1. 2. 3. Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2013, 13:57:06 |
|
||
|
clone() массива объектов: не понимаю, когда копирует элементы, а когда только ссылки
|
|||
|---|---|---|---|
|
#18+
Мне непонятно, почему с BigInteger-массивом "всё не так". Там клонирование что, глубокое ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2013, 14:24:47 |
|
||
|
clone() массива объектов: не понимаю, когда копирует элементы, а когда только ссылки
|
|||
|---|---|---|---|
|
#18+
ozzmosis, что непонятного? массивы бигинтегеров после клонирования разные , но элементы в них одинаковые . в одном из массивов вы заменили один их элементов. Увидели закономерный результат. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2013, 14:30:23 |
|
||
|
clone() массива объектов: не понимаю, когда копирует элементы, а когда только ссылки
|
|||
|---|---|---|---|
|
#18+
ozzmosisМне непонятно, почему с BigInteger-массивом "всё не так". Там клонирование что, глубокое ? В примере с BigInt вы меняете элемент второго уровня: B, E, поэтому он меняется только у одного из массивов. Т.е. меняется ссылка - элемент массив. У каждого массива свои элементы. В примере с Element меняется третий уровень - (C, D, F, G) В данном случае оба массива ссылаются на один и тот же элемент 2го уровня. Меняется один объект. Оба массива ссылаются на один объект. Оба "видят" изменения. Принципиальная разница в том что BigInteger - immutable тип, а Element - mutable. Вы их по разному используете. К вопросу клонирования это вообще отношения не имеет. В первом ba[2]=new BigInteger("11"); Во втором ea[2].name="Zn"; А должно быть ea[2] = new Element(); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2013, 14:32:56 |
|
||
|
|

start [/forum/search_topic.php?author=bug76&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
get settings: |
11ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
| others: | 769ms |
| total: | 931ms |

| 0 / 0 |
