明明都是引用类型,为啥StringBuffer和String给方法传递参数时,会有以下代码这样的区别?

明明都是引用类型,为啥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
偶然的你
浏览 557回答 4
4回答

白板的微信

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版)》多看几遍,这样比上网学习效率更高,基础更扎实)

大话西游666

s += "bbb"改变方法参数了,对方法外是不起作用的。

GCT1015

给你看一下我写的这两篇文章,应该可以解答你的问题了。 Java 函数调用是传值还是传引用? 从字节码角度来看看 从字节码和JVM的角度解析Java核心类String的不可变特性
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java