明明都是引用类型,为啥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
String是不可变的。
(由于StringBuffer为了多线程安全的,每个方法都加锁了(synchronized),所以效率比较低,一般都用StringBuidler。另外,如果刚开始学习Java,建议你把《Java程序设计语言(第4版)》多看几遍,这样比上网学习效率更高,基础更扎实)