You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何操作List引用会影响ArrayList实例?Java代码疑问

问题解释:操作List2为何影响List1?

你遇到的问题和List/ArrayList的类型差异无关,本质是Java中对象引用的工作机制:

当你执行List<String> List2 = List1;这行代码时,并没有创建新的ArrayList对象,只是让List2这个引用变量,和List1指向了内存中同一个ArrayList实例。打个比方:List1是一把打开某栋房子的钥匙,List2是复制了这把钥匙,两把钥匙开的是同一栋房子——你用List2往房子里放了"Kiwi",用List1打开门自然也能看到这个新增的元素。

结合你的代码具体分析:

  1. ArrayList<String> List1 = new ArrayList<String>();:在内存中创建了一个空的ArrayList对象,List1引用指向这个对象。
  2. 调用List1.add(...)三次,是给这个ArrayList对象添加元素。
  3. List<String> List2 = List1;:List2引用现在和List1指向同一个ArrayList对象,没有新对象被创建。
  4. List2.add("Kiwi");:本质是对同一个ArrayList对象添加元素,所以List1和List2打印出来的结果完全一致。

如果想让List2成为独立的列表,操作它不影响List1,可以创建一个新的ArrayList并传入原列表的元素:

List<String> List2 = new ArrayList<>(List1);

这样List2会指向一个新的ArrayList对象,里面复制了List1的初始元素,后续操作List2就不会影响List1了。

内容的提问来源于stack exchange,提问作者Alexander Kemos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 21:55:30