如果我创建一个列表并添加十个元素然后将列表对象复制到另一个并在第二个列表上调用list.clear,则清除这两个列表.
Random random = new Random();
List<Double> list1 = new ArrayList<Double>();
List<Double> list2 = new ArrayList<Double>();
for (int i = 0; i < 10; i++) {
list1.add(random.nextDouble());
}
list2 = list1; //Both lists have ten elements
list1.clear(); //Both lists are now empty
Run Code Online (Sandbox Code Playgroud)
这是正常的吗?我错过了什么吗?如果我遍历第一个列表并逐个添加元素,则不会发生这种情况,只有list2 = list1行.
list2 = list1; //Both lists have ten elements
Run Code Online (Sandbox Code Playgroud)
这不会复制list1到list2.它使变量list2引用相同的列表list1.两个变量都指向同一个列表对象.
之前
list1 -----> [ArrayList #1]
list2 -----> [ArrayList #2]
Run Code Online (Sandbox Code Playgroud)
后
list1 --+--> [ArrayList #1]
|
list2 --+ [ArrayList #2] (orphaned, will be garbage collected)
Run Code Online (Sandbox Code Playgroud)
要将第一个列表的元素复制到第二个列表,请执行以下操作:
list2.addAll(list1);
Run Code Online (Sandbox Code Playgroud)
(如果list2不是空的,你也需要list2.clear().)