gpt4 book ai didi

java - 两个ArrayList具有相同的引用

转载 作者:行者123 更新时间:2023-12-01 07:35:22 25 4
gpt4 key购买 nike

import java.util.*;

class Test {
public static void main(String[] args) {
ArrayList<Integer> a = new ArrayList<Integer>();
ArrayList<Integer> b = new ArrayList<Integer>();
//added 0-9 to ArrayList
for(int i=0;i<9;i++)
a.add(new Integer(i));

//initialize the Iterator
ListIterator<Integer> i = a.listIterator();
while(i.hasNext())
System.out.print(i.next());

System.out.print(" ");

b = a;
Collections.shuffle(a);
//initialized the iterator again and print all the elements
i = b.listIterator();
while(i.hasNext())
System.out.print(i.next());
}
}

//Output : 012345678 528430617

根据上面的代码,如果我对 ArrayList a 进行洗牌,则 ArrayList b 也会更新那么我怎样才能看到即使更新 a 之后它也不应该更新 b

最佳答案

这段代码并没有做你想象的那样:

b = a;

ba 的值都是引用,而不是对象。上面的语句只是将 a 的值复制到 b,因此现在两个变量具有相同的值,引用同一个对象。

同一点的另一个演示:

StringBuilder x = new StringBuilder();
StringBuilder y = x;
x.append("foo");
System.out.println(y); // Will print foo

所有 Java 中的对象都是这样工作的。表达式的值始终是原始值或引用,从不是对象。

如果您想创建第二个对象,则需要明确地执行此操作。

关于java - 两个ArrayList具有相同的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12806149/

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