StringBuffer str2=new StringBuffer();
Deque<StringBuffer> deque=new LinkedList<StringBuffer>();
for(int i=0;i<=7;i++){
if(i<4){
str2=str2.append("*");
System.out.println(str2);
deque.push(str2);
}else{
System.out.println(deque.pop());
}
}
String str3="";
Deque<String> deque2=new LinkedList<String>();
for(int i=0;i<=7;i++){
if(i<4){
str3=str3+"*";
System.out.println(str3);
deque2.push(str3);
}else{
System.out.println(deque2.pop());
}
}
第一段小程序输出结果为:
*
**
***
****
****
****
****
与预期不一致
第二段小程序输出结果为:
*
**
***
****
****
***
**
*
与预期一致
yu
原因分析:
第一段中,栈每次入栈保存的是StringBuffer引用,他们同指向一个StringBuffer对象,而在第二段中,String每次都会重新创建一个对象,所以入栈保存的信息会得到预期效果,不会因为后面的改变而影响zhiq之前的结果