【问题标题】:StringBuffer method parameter - doesn't change value [duplicate]StringBuffer 方法参数 - 不改变值 [重复]
【发布时间】:2016-04-14 19:22:27
【问题描述】:

我知道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 stringbuffer


    【解决方案1】:

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

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

    此方法将引用副本复制到StringBuffer。将该引用更改为指向对象对原始对象没有任何影响。但是,如果您将其实现为

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

    那么它会起作用。

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

    【讨论】:

    • 它与 sb.setLength(0); sb.append(ss);谢谢
    • 是的,这将是等效的。
    猜你喜欢
    • 2021-02-27
    • 1970-01-01
    • 1970-01-01
    • 2013-05-06
    • 2022-07-14
    • 2016-05-12
    • 1970-01-01
    • 2010-10-04
    • 1970-01-01
    相关资源
    最近更新 更多