仅将数组列表作为值传递,而不作为引用传递

简单地说,我有一个带有ArrayList参数的方法。在方法中,我修改 ArrayList 的内容,仅用于与该方法返回的内容相关的目的。因此,我不希望作为参数传递的 ArrayList 受到任何影响(即不作为引用传递)。

我尝试过的一切都未能达到预期的效果。我需要做什么才能仅在方法中使用 ArrayList 的副本,而不能让它更改实际的变量?


答案 1

即使您有办法将数组列表作为副本传递,而不是通过引用,它也只是一个浅层副本。

我会做这样的事情:

void foo(final ArrayList list) {

    ArrayList listCopy = new ArrayList(list);
    // Rest of the code

}

只需在复制的列表上工作即可。


答案 2

您可以使用 ArrayList 的复制构造函数创建 ArrayList 的副本:

ArrayList copy = new ArrayList(original);

但是,如果列表的元素也是对象,则必须注意,修改副本的成员也会修改原始成员。