仅将数组列表作为值传递,而不作为引用传递
2022-09-01 02:23:28
简单地说,我有一个带有ArrayList参数的方法。在方法中,我修改 ArrayList 的内容,仅用于与该方法返回的内容相关的目的。因此,我不希望作为参数传递的 ArrayList 受到任何影响(即不作为引用传递)。
我尝试过的一切都未能达到预期的效果。我需要做什么才能仅在方法中使用 ArrayList 的副本,而不能让它更改实际的变量?
简单地说,我有一个带有ArrayList参数的方法。在方法中,我修改 ArrayList 的内容,仅用于与该方法返回的内容相关的目的。因此,我不希望作为参数传递的 ArrayList 受到任何影响(即不作为引用传递)。
我尝试过的一切都未能达到预期的效果。我需要做什么才能仅在方法中使用 ArrayList 的副本,而不能让它更改实际的变量?
即使您有办法将数组列表作为副本传递,而不是通过引用,它也只是一个浅层副本。
我会做这样的事情:
void foo(final ArrayList list) {
ArrayList listCopy = new ArrayList(list);
// Rest of the code
}
只需在复制的列表上工作即可。
您可以使用 ArrayList 的复制构造函数创建 ArrayList 的副本:
ArrayList copy = new ArrayList(original);
但是,如果列表的元素也是对象,则必须注意,修改副本的成员也会修改原始成员。