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
相关产品推荐
相关产品推荐

