这可能是一个非常简单的问题,但它仍然让我感到困惑!
import java.util.ArrayList;
public class Sample {
ArrayList<Integer> i = new ArrayList<>();
ArrayList<Integer> j = new ArrayList<>();
/**
* @param args
*/
public static void main(String[] args) {
new Sample().go();
}
private void go() {
i.add(1);
i.add(2);
i.add(3);
j=i;
i.remove(0);
System.out.println(i + "asd" + j);
}
}
我试着打印它:
[2, 3]asd[2, 3]
为什么 i 改变时 j 也会改变?但是不会发生在原语上!
最佳答案
语句j=i;
将引用j
指定为与i
相同的引用。现在 i
和 j
都引用同一个 ArrayList
对象。通过两个引用可以简单地看到第 0 个索引的删除。
如果您希望删除 i
中的项目不影响 j
中的列表,则创建列表的副本,而不是分配引用:
j = new ArrayList<Integer>(i);
(这是一个浅拷贝,所以列表仍然引用相同的元素。)
关于java - 为什么一个 arraylist 的副本被修改时会发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19572953/