我有一個對象,我使用方法theList.add(theObj)
將其添加到List
。將對象存儲在列表中,然後對對象進行更改
如果我現在對這個對象theObj
進行更改,這些更改是否會始終反映在存儲在列表中的對象中?
如果是的話,這是否意味着在java中List
只存儲引用而不是其傳遞的對象的唯一副本?
我有一個對象,我使用方法theList.add(theObj)
將其添加到List
。將對象存儲在列表中,然後對對象進行更改
如果我現在對這個對象theObj
進行更改,這些更改是否會始終反映在存儲在列表中的對象中?
如果是的話,這是否意味着在java中List
只存儲引用而不是其傳遞的對象的唯一副本?
在列表中不存儲對象。您在列表中存儲參考。
是的,如果您通過任何引用對對象進行更改,則該更改將可見,但是如果您遇到同一個對象,則會發生該更改。
也是如此進行分配,參數傳遞等:
StringBuilder builder = new StringBuilder();
StringBuilder builder2 = builder;
builder.append("foo");
System.out.println(builder2); // Prints foo
這裏builder
和builder2
的值是到相同StringBuilder
對象引用 - 因此具有經由builder
所附一個字符串數據中的對象,您可以通過builder2
獲得相同的信息。
如果是的話,這是否意味着在 的Java只存儲引用而不是 獨特的是 傳遞的對象的拷貝,但名單?
那麼,如果您使用的是基元,它會複製一份。可能還有字符串。
Java集合框架中的所有數據結構的行爲是這樣嗎? – 2011-04-09 11:23:42
@Shailesh:這與Java *集合*沒有任何關係,特別是 - 它是Java的所有*工作方式。變量的值永遠不是* object *;它始終是原始值或參考。 – 2011-04-09 17:39:53
謝謝。這給了我很多清晰。 – 2011-04-11 09:00:16