日期:2014-05-20  浏览次数:20655 次

String 和StringBuffer的区别,谁能指教一下
我的程序:
package   brick0906;

public   class   NumberText   {


public   static   void   main(String   args[]){
NumberText   n=   new   NumberText();
StringBuffer   sb   =   new   StringBuffer( "123 ");
n.append(sb);

System.out.println(sb.toString());
}
private   void   append(StringBuffer   sb)   {
sb.append( "abc ");
System.out.println(sb.toString());
sb   =   new   StringBuffer( "xyz ");
System.out.println(sb.toString());
}
}
 

最后显示:
123abc
xyz
123abc

-------------------------------------------

在append()方法中,sb不是已经变成xyz了吗,怎么最后还是显示123abc啊,教教我哈

------解决方案--------------------
因为java传参数的时候是传值的

那么怎么传值呢?

StringBuffer sb=new StringBuffer( "123 ");
我们这样建立了一个对象
内存中村着数据“123“
而sb 这个变量指向这个区域 sb---〉”123“
那么另外一个变量 sbb--〉”123“
也是指向同一个区域
所以当sbb.append( "abc ")的时候
这块内存区域的值就变成“123abc”
sb---〉“123abc”
sbb---〉“123abc”
但是当我们执行下面一步
sbb=new StringBuffer( "123 ");
的时候
sbb 指向另外一个内存空间 那里放着“123”
sbb--〉“123”
而sb--〉“123abc“
仍然指向原来这块区域
所以结果是这样了
所以请记住java是传值这个概念