在循环中的 ArrayList.add() 之后,所有元素都是相同的。为什么? [复制]

2023-12-01

如果我这样做[准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中的引用传递有关系吗?为什么第一种情况下的元素是相同的?谢谢。


Java 使用按值调用,但这里这些值是参考到物体。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在循环中的 ArrayList.add() 之后,所有元素都是相同的。为什么? [复制] 的相关文章

随机推荐