这个问题已经有了答案:
Why does my ArrayList contain N copies of the last item added to the list?
4答
如果我这样做[准Java代码]:
while (loop)
{
localObject = getDataForObject();
globalPublicStaticArrayList<Object>.add(localObject);
}
globalPublicStaticArrayList中的所有元素都相同,等于添加的LocalObject的最后一个副本。我遍历了调试器中的循环,发现只要添加了一个对象,它就会被复制到globalPublicStaticalList的所有元素中。
我找到的解决办法是:
while (loop)
{
localObject = getDataForObject();
globalPublicStaticArrayList<Object>.add(new Object(localObject.member1, localObject.member2,...));
}
它与Java中的传递引用有关吗?为什么在第一种情况下元素是相同的?谢谢。
最佳答案
Java使用按值调用,但这里这些值是对对象的引用。
添加到列表中的不是对象的副本,而是引用的副本。您的方法每次调用时都返回相同的对象。它可能每次都会返回一个新对象,那么您就不需要这个解决方法了。