首页 > 解决方案 > java中定义为a = b时,为什么ArrayList.add()会向多个arraylist添加值?

问题描述

我最近在 java 中遇到了一个奇怪的“功能”,这意味着当我将项目添加到不同的列表时,ArrayLists 似乎神奇地添加了项目。见下文:

List<Integer> i = new ArrayList<Integer>();
List<Integer> i2 = i;
i.add(77);
System.out.println(i);
System.out.println(i2);

该程序给出输出:

[77]
[77]

但是,如果您只用整数替换列表:

int i = 5;
int i2 = i;
i = 7;
System.out.println(i);
System.out.println(i2);

它像我期望的那样工作,给出结果

7
5

为什么会发生这种情况,当我这样做时,我怎样才能停止ii2成为同一个列表i.add()

标签: javalist

解决方案


在这方面,基元之类的int行为与对象之类的行为不同ArrayList。与原语一起使用=会产生原语的副本,而对对象这样做会得到相同的对象。如果您随后尝试改变对象(例如.add()),那么对象将被改变,并且引用它的两个变量都可以看到。

要制作“软拷贝”(包含相同元素的不同列表),您可以ArrayList使用现有的 ' 调用构造函数ArrayList

List<Integer> i = new ArrayList<>();
List<Integer> i2 = new ArrayList<>(i);

推荐阅读