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

Java中通过ArrayList构造方法复制的list3与list2是否指向同一内存实例?

ArrayList复制实例的内存指向问题

结论很明确:list3和list2指向的是内存中两个独立的ArrayList对象,只是它们初始的大小和内容相同(这里因为list2是空的,所以两者都是空集合)。

在Java中,当你使用new ArrayList<>(list2)这种构造方法时,底层逻辑是创建一个全新的ArrayList实例,然后将传入的list2中的所有元素复制到这个新实例中。也就是说:

  • list2是第一个ArrayList对象的引用
  • list3是第二个全新ArrayList对象的引用
  • 两者在内存中占据不同的存储空间,后续对其中一个集合的修改(比如添加、删除元素)不会影响另一个

举个简单的代码例子就能直观验证:

ArrayList<String> list2 = new ArrayList<>();
ArrayList<String> list3 = new ArrayList<>(list2);

// 给list3添加元素
list3.add("Hello");

// 此时list2仍然是空的,list3有一个元素
System.out.println(list2.size()); // 输出 0
System.out.println(list3.size()); // 输出 1

这就证明了两者是完全独立的对象,并非指向同一个内存地址。

书中提到的“复制该ArrayList的大小和内容”,指的是把原集合的元素和容量信息复制到新集合里,而不是让两个引用指向同一个对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 12:20:58