为什么下面提到的代码打印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;
}
答案 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();
循环之外,以引用同一个对象。