This question already has answers here:
Assigning in Java?
                                
                                    (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()应该是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

07-24 21:30