StringBuffer方法参数 - 不会更改值

时间:2016-04-14 19:22:28

标签: java stringbuffer

我知道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);
    }
}

1 个答案:

答案 0 :(得分:2)

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

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

此方法将引用副本带到StringBuffer。将该引用更改为指向对象对原始对象无任何影响。但是如果你把它实现为

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

然后它会起作用。

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