明明都是引用类型,为啥StringBuffer和String给方法传递参数时,会有以下代码这样的区别?
package test_heima;
public class Demo10 {
public static void main(String[] args) {
String s1 = "aaa";
System.out.println(s1);
change(s1);
System.out.println(s1);
StringBuffer s2 = new StringBuffer();
s2.append("kkk");
System.out.println(s2);
change(s2);
System.out.println(s2);
}
public static void change(StringBuffer s) {
s.append("zzz");
}
public static void change(String s) {
s += "bbb";
}
}
以下代码结果为
aaa
aaa
kkk
kkkzzz
4 回答
白板的微信
TA贡献1883条经验 获得超3个赞
String是不可变的。
String str1 = "abc";
str1 + "zzz"; //这个操作将产生一个新的字符串,相当与 String str2 = str1 + "zzz";
StringBuffer sb = new StringBuffer("abc");
sb.append("zzz"); // 会改变里面的值并返回自己,但不会产生一个新的StringBuffer
(由于StringBuffer为了多线程安全的,每个方法都加锁了(synchronized),所以效率比较低,一般都用StringBuidler。另外,如果刚开始学习Java,建议你把《Java程序设计语言(第4版)》多看几遍,这样比上网学习效率更高,基础更扎实)
GCT1015
TA贡献1827条经验 获得超4个赞
添加回答
举报
0/150
提交
取消