2

如果我这样做[准java代码]:

while (loop)
{
    localObject = getDataForObject();
    globalPublicStaticArrayList<Object>.add(localObject);
}

globalPublicStaticArrayList 中的所有元素都是相同的,等于添加的最后一个 localObject 副本。我通过调试器中的循环,看到一旦添加了一个对象,它就会被复制到 globalPublicStaticArrayList 的所有元素中。

我找到的解决方法是:

while (loop)
{
    localObject = getDataForObject();
    globalPublicStaticArrayList<Object>.add(new Object(localObject.member1, localObject.member2,...));
}

它与Java中的引用传递有关吗?为什么在第一种情况下元素是相同的?谢谢。

4

3 回答 3

5

Java 使用按值调用,但这里这些值是对对象的引用。

您添加到列表中的不是对象的副本,而是引用的副本。您的方法每次调用时都返回相同的对象。它可能每次都应该返回一个新对象,那么您就不需要这种解决方法。

于 2012-11-09T12:55:27.653 回答
2
globalPublicStaticArrayList<Object>.add(localObject);

在这里,您正在传递 localObject 引用。您想要每个对象的副本,您应该在每次迭代中创建一个新对象

于 2012-11-09T12:55:51.800 回答
0

在 getDataForObject() 中,您可能没有创建返回类型的“新”对象。因此,所有对象都指向相同的地址。

于 2012-11-09T12:59:04.147 回答