例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"); }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)