【发布时间】:2011-04-08 10:34:41
【问题描述】:
我有一个对象,我使用theList.add(theObj) 方法将其添加到List。
如果我现在对此对象theObj 进行更改,这些更改是否会始终反映在存储在列表中的对象中?
如果是,这是否意味着java中的List只存储引用而不是它所传递对象的唯一副本?
【问题讨论】:
标签: java list data-structures reference storage
我有一个对象,我使用theList.add(theObj) 方法将其添加到List。
如果我现在对此对象theObj 进行更改,这些更改是否会始终反映在存储在列表中的对象中?
如果是,这是否意味着java中的List只存储引用而不是它所传递对象的唯一副本?
【问题讨论】:
标签: java list data-structures reference storage
您没有在列表中存储对象。您在列表中存储了一个引用。
是的,如果您通过 any 引用对对象进行更改,则该更改将是可见的,但是您将获得相同的对象。
赋值、参数传递等也是如此:
StringBuilder builder = new StringBuilder();
StringBuilder builder2 = builder;
builder.append("foo");
System.out.println(builder2); // Prints foo
这里builder 和builder2 的值是对同一个StringBuilder 对象的引用 - 因此通过builder 将字符串附加到对象中的数据后,您可以通过builder2 获得相同的信息.
【讨论】:
如果是,这是否意味着 List in java只存储引用而不存储 它是对象的唯一副本 通过了?
好吧,如果您使用原语,它会创建一个副本。可能还有字符串。
【讨论】: