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
。
答案 0 :(得分:2)
当您进行这样的分配时:
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