【问题标题】:Confused with object references对对象引用感到困惑
【发布时间】:2014-02-11 06:45:32
【问题描述】:

我正在为 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

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

【问题讨论】:

标签: java object arraylist


【解决方案1】:

引用是指针。为变量分配新值在于使该指针指向另一个对象。所以,一开始,你有一个包含两个元素的数组:

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] 仍然引用相同的对象 Jan 和 Feb。

【讨论】:

    猜你喜欢
    • 2012-04-08
    • 2014-11-28
    • 2018-03-05
    • 1970-01-01
    • 2015-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多