java - 为什么ArrayList.add()在java中将值添加到定义为a = b的多个数组列表中?

标签 java list

我最近在 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

为什么会发生这种情况以及如何阻止ii2当我这样做时成为相同的列表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/

相关文章:

Python:为什么列表没有查找方法?

java - 将逻辑应用于 Spring @Import 注解

java - 数组作为列表转换为二进制

java - 在java servlet中存储用户特定数据?

java 声音。暂时静音背景音乐并播放声音

python - 如何在python中继承 "Manager().list"?

python - 拆分每个第 n 个字符串元素并合并到数组中的最佳方法?

java - 独立的 JavaFX 应用程序

html - 自定义 HTML 列表项目符号和文本换行/对齐

python - 如何检查一个变量是否存在于多个列表中?