与对象引用混淆

时间:2014-02-11 06:45:32

标签: java object arraylist

我正在准备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

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

1 个答案:

答案 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。