例1:
public static void main(String[] args){
String str="hello";
changeStr(str);
System.out.print(str); //打印的结果是hello
}
static void changeStr(String str){
str="hi";
}
1.字符串是char类型的数组 char[] 2.修改时传递的是hello的地址 3.字符串比较特殊,在常量池中的str,修改的时候,不是直接修改了地址对应的char数组,而是重新建了一个char[],地址赋值给str 4,所以修改函数执行之后,外面的str没有发送变化
例2:
java字符串的修改,参考链接
public static void main(String[] args) {
String x = new String("ab");
change(x);
System.out.println(x);
}
public static void change(String x) {
x = "cd";
}
解决办法
如果我们真的需要去改变对象的值,首先,对象应该是可变的,比如StringBuilder。其次,我们需要确保没有创建新对象并将其分配给参数变量,因为Java只是按值传递。
public static void main(String[] args) {
StringBuilder x = new StringBuilder("ab");
change(x);
System.out.println(x);
}
public static void change(StringBuilder x) {
x.delete(0, 2).append("cd");
}



