gpt4 book ai didi

java - 为什么当我修改原始ArrayList时,复制的ArrayList也会被修改

转载 作者:行者123 更新时间:2023-12-02 02:00:41 25 4
gpt4 key购买 nike

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()应该是0aList2.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

关于java - 为什么当我修改原始ArrayList时,复制的ArrayList也会被修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51633245/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com