我最近在 java 中遇到了一个奇怪的“功能”,这意味着当我将项目添加到不同的列表时,ArrayList 似乎神奇地添加了项目。见下文:
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
为什么会发生这种情况以及如何阻止i
和i2
当我这样做时成为相同的列表i.add()
?
最佳答案
在这方面,int
等基元的行为与 ArrayList
等对象不同。将 =
与原语一起使用将产生该原语的副本,而对对象这样做将产生相同的对象。如果您随后尝试改变该对象(例如,.add()
),则该对象将发生改变,并且引用它的两个变量都将能够看到这一点。
要制作“软副本”(包含相同元素的不同列表),您可以使用现有的 ArrayList 调用 ArrayList 的构造函数:
List<Integer> i = new ArrayList<>();
List<Integer> i2 = new ArrayList<>(i);
关于java - 为什么ArrayList.add()在java中将值添加到定义为a = b的多个数组列表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60383894/