2012-02-21 43 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时,列表实例没有任何改变。