gpt4 book ai didi

java - 与对象引用混淆

转载 作者:行者123 更新时间:2023-12-01 18:36:38 25 4
gpt4 key购买 nike

我正在准备 Java 认证,但在这种情况下对对象引用感到困惑。在这段代码中,我不明白为什么当我们向 ArrayList 和数组的元素分配新对象时,它们不受影响?

    ArrayList<StringBuilder> myArrList = new ArrayList<StringBuilder>();
StringBuilder sb1 = new StringBuilder("Jan");
StringBuilder sb2 = new StringBuilder("Feb");
myArrList.add(sb1);
myArrList.add(sb2);

StringBuilder[] array = myArrList.toArray(new StringBuilder[2]);
for(StringBuilder val : array) {
System.out.println(val);
}

StringBuilder sb3 = new StringBuilder("NNN");
sb2 = sb3;

for(StringBuilder val : array) {
System.out.println(val);
}

for(StringBuilder val : myArrList) {
System.out.println(val);
}

输出:

Jan
Feb
Jan
Feb
Jan
Feb

如果您能提供简单的解释,我将不胜感激。谢谢。

最佳答案

引用是指针。为变量分配新值意味着使该指针指向另一个对象。因此,一开始,您有一个包含两个元素的数组:

array[0] ---> Jan <--- sb1
array[1] ---> Feb <--- sb2

然后创建另一个 StringBuilder,由 sb3 引用:

array[0] ---> Jan <--- sb1
array[1] ---> Feb <--- sb2
sb3 --------> NNN

然后你说 sb2 变量应该引用与 sb3 变量相同的对象:

array[0] ---> Jan <--- sb1
array[1] ---> Feb
sb3 --------> NNN <--- sb2

如您所见,array[0] 和 array[1] 仍然引用一月和二月的相同对象。

关于java - 与对象引用混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21694968/

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