我正在准备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
如果您能提供简单的解释,我将不胜感激。谢谢。
答案 0 :(得分:4)
引用是指针。为变量赋值是指使该指针指向另一个对象。因此,在开始时,您有一个包含两个元素的数组:
array[0] ---> Jan <--- sb1
array[1] ---> Feb <--- sb2
然后创建另一个由sb3引用的StringBuilder:
array[0] ---> Jan <--- sb1
array[1] ---> Feb <--- sb2
sb3 --------> NNN
然后你说sb2变量应该引用与sb3变量相同的对象:
array[0] ---> Jan <--- sb1
array[1] ---> Feb
sb3 --------> NNN <--- sb2
正如您所见,数组[0]和数组[1]仍引用相同的对象Jan和Feb。