2012-02-21 41 views
1

需要一些輸入:ArrayList objects

假設我有N ArrayList並在每個我加入foo()對象。

Foo foo = new Foo() 

A.add(foo); 

B.add(foo); 

N.add(foo); 

現在修改任何一個foo()對象上進行,將在所有其他數組列表反映?

  1. 如果是爲什麼?和

  2. 這種行爲是否也可以實現使用任何其他集合像Vector等......?

  3. 如果我讓foo爲null,它會反映在所有的數組列表中嗎?

回答

8
  1. 是的,因爲所有的列表只包含一個參照相同的對象
  2. 是的,所有集合的工作就像是
  3. 沒有,因爲你只能設置爲null的引用,每個列表有參考文獻的副本。
+0

能否詳細說明3中的「否」? – aviad 2012-02-21 13:06:02

+0

@aviad:每個B和N都包含一個引用foo的副本,並且它們都引用同一個對象。將foo設置爲null將不會對副本產生任何影響。 – 2012-02-21 13:08:59

+0

我認爲對象本身將被取消(foo = null),那麼所有的集合都會引用null。我想念什麼? – aviad 2012-02-21 13:15:14

0

在堆內存中的對象的任何實施​​如ArrayListVector保持基準,所以當你將被get(index)方法得到List的索引,你achive參考對象,以便:

  1. 是的,如果通過get(index)方法獲得列表的索引,然後更改已實現對象的統計信息,則更改將保留在內存中。
  2. 是的,所有​​都有這種行爲。
  3. 不,當達到列表的索引時,act是:「你實現了對象的引用副本」,當它設置爲null時,列表實例沒有任何改變。