它可能是一个非常简单的但它仍然让我感到困惑!
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);
}
}
Run Code Online (Sandbox Code Playgroud)
我试着打印它:
[2, 3]asd[2, 3]
Run Code Online (Sandbox Code Playgroud)
当我改变时,为什么j会改变?虽然不是原始的!
该语句j=i;将引用指定为与引用j相同的引用i.现在,这两个i并j指向同一个ArrayList对象.通过两个引用都可以看到删除第0个索引.
如果您希望删除i不影响列表的项目j,则创建列表的副本,而不是分配引用:
j = new ArrayList<Integer>(i);
Run Code Online (Sandbox Code Playgroud)
(这是一个浅层副本,因此列表仍然引用相同的元素.)