为什么ArrayList.add()将值定义为a = b时将值添加到Java中的多个arraylist?
来源:爱站网时间:2021-12-01编辑:网友分享
我最近在Java中遇到了一个怪异的“功能”,这意味着当我将项目添加到另一个列表时,ArrayList似乎神奇地添加了项目。面对这个问题该怎么解决呢,爱站技术小编用一篇文章几分钟的时间给大家详细的讲解一下内容。
i = new ...
问题描述
我最近在Java中遇到了一个怪异的“功能”,这意味着当我将项目添加到另一个列表时,ArrayList似乎神奇地添加了项目。见下文:
List i = new ArrayList();
List 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 i = new ArrayList();
List i2 = new ArrayList(i);
以上内容就是爱站技术频道小编为大家分享的为什么ArrayList.add()将值定义为a = b时将值添加到Java中的多个arraylist? 看完以上分享之后,大家应该都知道是为什么了吧。