StringBuffer 方法参数 - 不改变值

StringBuffer method parameter - doesn't change value

我知道 String 是不可变的,它的值不能改变,但为什么下面的 StringBuffer 的值在像方法参数一样发送时不会改变。根据我的理解,它应该随着新值 "bb" 而改变。谢谢您的帮助。

class Ideone {

    public static void main (String[] args) {

        String s = "aa";
        StringBuffer sb = new StringBuffer("aa");
        modify(s, "bb");
        modify2(sb, "bb");
        System.out.println(s);
        System.out.println(sb);
    }

    public static void modify(String s, String ss) {
        s = ss;
    }

    public static void modify2(StringBuffer sb, String ss) {
        sb = new StringBuffer(ss);
    }
}

Java 中的通用规则是您不能更改传递给方法的对象的引用,但可以更改其 内容。

public static void modify2(StringBuffer sb, String ss){

此方法将 referencecopyStringBuffer。将该引用更改为指向对象对原始对象没有任何影响。但是如果你把它实现为

sb.clear();
sb.append(ss);

那就可以了。

同样,规则是重新分配传递给方法的对象 = 对原始对象没有任何影响,但您可以很好地更改该对象的内容。