Сохранение объекта в списке, а затем внесение изменений в объект - PullRequest
1 голос
/ 08 апреля 2011

У меня есть объект, который я добавляю к List с использованием метода theList.add(theObj).

Если я сейчас внесу изменения в этот объект theObj, будут ли эти изменения всегда отражаться в сохраненном объектев списке?

Если да, значит ли это, что List в java хранит только ссылки, а не уникальные копии объектов, которые ему переданы?

Ответы [ 2 ]

11 голосов
/ 08 апреля 2011

Вы не сохраняете объект в списке. Вы сохраняете ссылку в списке.

И да, если вы сделаете изменение объекта с помощью любой ссылки, это изменение будет видно, однако в противном случае вы получите тот же объект.

То же самое верно для присваивания, передачи аргументов и т. Д .:

StringBuilder builder = new StringBuilder();
StringBuilder builder2 = builder;

builder.append("foo");
System.out.println(builder2); // Prints foo

Здесь значения builder и builder2 являются ссылками на один и тот же объект StringBuilder - поэтому, добавив строку к данным в объекте через builder, вы можете получить ту же информацию через builder2 .

0 голосов
/ 08 апреля 2011

Если да, означает ли это, что List в java хранит только ссылки, а не уникальные копии объектов, которым он был передан?

Что ж, он сделает копию, если выиспользуя примитивы.И, возможно, строки.

...