2011-04-08 80 views
1

我有一個對象,我使用方法theList.add(theObj)將其添加到List將對象存儲在列表中,然後對對象進行更改

如果我現在對這個對象theObj進行更改,這些更改是否會始終反映在存儲在列表中的對象中?

如果是的話,這是否意味着在java中List只存儲引用而不是其傳遞的對象的唯一副本?

回答

11

在列表中不存儲對象。您在列表中存儲參考

是的,如果您通過任何引用對對象進行更改,則該更改將可見,但是如果您遇到同一個對象,則會發生該更改。

也是如此進行分配,參數傳遞等:

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

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

這裏builderbuilder2的值是到相同StringBuilder對象引用 - 因此具有經由builder所附一個字符串數據中的對象,您可以通過builder2獲得相同的信息。

+0

Java集合框架中的所有數據結構的行爲是這樣嗎? – 2011-04-09 11:23:42

+0

@Shailesh:這與Java *集合*沒有任何關係,特別是 - 它是Java的所有*工作方式。變量的值永遠不是* object *;它始終是原始值或參考。 – 2011-04-09 17:39:53

+0

謝謝。這給了我很多清晰。 – 2011-04-11 09:00:16

0

如果是的話,這是否意味着在 的Java只存儲引用而不是 獨特的是 傳遞的對象的拷貝,但名單?

那麼,如果您使用的是基元,它會複製一份。可能還有字符串。