Java内存引用问题

时间:2015-05-21 10:31:51

标签: java

为什么下面提到的代码打印4,3,2,1,0,为什么不打印4,4,4,4,4。由于引用sb是相同的,为什么不指向最后更新的值,为什么不将所有值更新为4

while(move() < 3){
    if(move() == 2){
        cout << "You hate this fruit: ";
    }
    cout << "Enter name of fruit: ";
    cin >> fruit;
    cout << endl;
}

2 个答案:

答案 0 :(得分:7)

  

由于参考sb相同

不是。您每次都使用sb 变量,但每次致电stack.add(sb)时,都会添加&#34; {{1}的当前值}}&#34;由于这一行,每次迭代都不同:

sb

了解&#34;变量&#34;之间的区别非常重要。和&#34;变量当前持有的值&#34;。

当您执行sb = new StringBuilder(); 时,它会评估stack.add(sb);的当前值(它将是对sb实例的引用),然后将该引用传递给StringBuilder。当您稍后更改Stack.add的值时,不会更改堆栈上的值。

现在,将其与此代码进行比较:

sb

此时,您对堆叠中的同一个StringBuilder sb = new StringBulder(); for (int i = 0; i < 5; i++) { sb.append(i); stack.add(sb); } 对象有5个引用,并且您打印出&#34; 01234&#34;五次。这次您要修改现有对象的内容,而不是更改StringBuilder的值。

答案 1 :(得分:0)

您需要<!-- Your CSS here --> <link href="/static/home/css/bootstrap.min.css" rel="stylesheet"> <div> <?php echo $mail->content; ?> </div> 置于 StringBuilder sb = new StringBuilder();循环之外,以引用同一个对象。