gpt4 book ai didi

java - 为什么通过 "= "在 java 中复制列表是错误的?

转载 作者:行者123 更新时间:2023-11-29 10:11:40 24 4
gpt4 key购买 nike

我尝试以这种方式从 A 构建列表 B:

List<Integer> B = A;

但是当我在B中添加一个新项目时,A也会被修改。如果我这样做:

B.addAll(A);
B.add(new_element);

没有之前的问题

有人知道原因吗?非常感谢。

最佳答案

使用 = 不会复制,它只会将两个变量指向同一个对象。

使用一个经典的例子,如果你有一个类

class Foo {
private List<Object> bar;

constructor(List<Object> start) {
bar = start;
}

getBar() {
return this.bar;
}
}

如果你运行:

List<Object> bar1 = new LinkedList<Object>();
Foo foo = new Foo(bar1);
bar1.getBar().add(new Object());

您希望 foo.getBar() 的长度是多少?

因为您只是传递对列表的引用,而不是制作副本,所以 bar1.add 调用实际上会将一个项目添加到 foo 的内部。它们不是单独的列表,您只是告诉 foo 挂起对 bar1 的引用,它会这样做。

这意味着对列表的任何更改都会影响可能持有引用的任何其他对象,当您使用多线程代码或正在传递您希望他们不要更改的数据时,这可能是致命的。

关于java - 为什么通过 "= "在 java 中复制列表是错误的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31707972/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com