Ці будзе addAll функцыі ў Java зрабіць копію

Калі list.addAll (песни2) называецца будзе аб'екты ў спісах будуць скапіяваныя ў спіс? ці проста скапіяваць іх спасылкі ... не знайшлі якіх-небудзь тлумачэнняў па Javadoc ...

20

3 адказы

Няма копіі аб'ектаў або іх дадзеных не вырабляецца; іх спасылкі проста дадаюцца ў спіс аб'ектаў.

31
дададзена
як бы вы зрабіць копію і addAll?
дададзена аўтар Jacolack, крыніца
Не, вядома, няма.
дададзена аўтар Ernest Friedman-Hill, крыніца
Так што ж адбудзецца, калі мы дадамо элемент пазней у песни2 ? Ці будзе дададзены ў спіс аўтаматычна?
дададзена аўтар iamprem, крыніца
Значыць, калі я змяніў элемент у list2 , то я буду бачыць мадыфікацыю з выхаду спіс правільна?
дададзена аўтар Neeson.Z, крыніца

Няма, аб'екты не будуць скапіяваныя; спасылкі на тыя ж аб'екты будуць дададзеныя ў спіс.

4
дададзена
Але ці ёсць дагавор забеспячэння гэтага? Я бачу, што ArrayList рэалізуе addAll() з дробнай копіяй, але няма ніякіх указанняў у доку.
дададзена аўтар Ziyao Wei, крыніца
як бы вы зрабіць копію і addAll?
дададзена аўтар Jacolack, крыніца
@ZiyaoWei: няма агульнага спосабу скапіяваць аб'ект у Java: не аўтаматычна згенераваныя Канструктары капіявання як у C ++, а Клон() метад падтрымліваецца вельмі мала класаў. Такім чынам, кантэйнер, што <я> хацеў , каб скапіяваць ўсе яго элементы апынулася б не ў стане зрабіць гэта.
дададзена аўтар Ernest Friedman-Hill, крыніца
Не, вядома, няма. Яны два асобных спісу.
дададзена аўтар Ernest Friedman-Hill, крыніца
@ZiyaoWei Ён сцвярджае, што «далучае ўсе элементы», дык гэта тое, што ён будзе рабіць - дадаваць ўсе элементы. Копія элемента не з'яўляецца элементам, гэта копія.
дададзена аўтар Dave Newton, крыніца
Так што ж адбудзецца, калі мы дадамо элемент пазней у песни2 ? Ці будзе дададзены ў спіс аўтаматычна?
дададзена аўтар iamprem, крыніца

Увогуле, Java не будзе капіяваць аб'екты, калі вы «дадаць усе», гэта значыць, для аб'ектаў, паказальнікі на арыгіналы выкарыстоўваюцца.

* But be careful ! For strings, due to immutability, an array copy will not point to the original string values, and you must not expect that changing a pointer to a string that was added to an array list will result in a new value inside the array list.

3
дададзена
як бы вы зрабіць копію і addAll?
дададзена аўтар Jacolack, крыніца