为什么modify函数没有执行


public class demo{
    public static void modify(String str) {
        // TODO 自动生成的方法存根
        str=str+"fly";
    }
    public static void main(String[] arg) {
        String str=new String("bird");
        modify(str);
        System.out.println(str);
        System.out.println("ewr"+"ewrf");
    }
}

第一行的输出结果仍然是bird。

String 类final修饰只能重新引用 不能进行修改
public static String modify(String str) {
// TODO 自动生成的方法存根
return str+"fly";
}
public static void main(String[] arg) {
String str=new String("bird");
str = modify(str);
System.out.println(str);
System.out.println("ewr"+"ewrf");
}

String的值是不可变的,导致每次对String的操作都会生成新的String对象,不仅效率低下,而且浪费大量优先的内存空间,所以,modify方法肯定是执行了。
如果将String 改为StringBuffer,就可以打印出你所需要的值。

public static void modify(StringBuffer str) {
        str.append("fly") ;
    }
    public static void main(String[] arg) {
        StringBuffer str = new StringBuffer("bird");
        modify(str);
        System.out.println(str);
        System.out.println("ewr"+"ewrf");
    }

然后,具体看一下String 和StringBuffer的区别。

在不考虑的情况下,使用StringBuilder,考虑线程安全时建议用StringBuffer