This question already has answers here:
Assigning in Java?
(5个答案)
2年前关闭。
为什么两个列表的大小都为零?根据我的理解,
当您更改
考虑您有一个这样的列表:
分配时:
它将是这样的:
当您更改L1时
其他列表也会受到影响
要解决此问题,您可以使用:
这将返回:
(5个答案)
2年前关闭。
ArrayList<Integer> aList1=new ArrayList<Integer>();
ArrayList<Integer> aList2=new ArrayList<Integer>();
aList1.add(1);
aList2=aList1;
aList1.clear();
System.out.println(aList1.size());
System.out.println(aList2.size());
为什么两个列表的大小都为零?根据我的理解,
aList1.size()
应该是0
,aList2.size()
应该是1
。 最佳答案
当您像这样进行分配时:
aList2 = aList1;
当您更改
aList2
时,aList1
将指向与aList1
相同的内存地址。考虑您有一个这样的列表:
+---+ +---+
O---> | 1 | --- | 2 |
+---+ +---+
分配时:
aList2 = aList1;
它将是这样的:
+---+ +---+
+--> L1---> | 1 | --- | 2 |
| +---+ +---+
|
L2--+
当您更改L1时
aList1.clear();
其他列表也会受到影响
+--> L1---> null
|
|
L2--+
要解决此问题,您可以使用:
aList2 = new ArrayList<>(aList1);
这将返回:
0
1
07-24 21:30