public static void main(String[] args) {
String str = new String("world");
char[] ch = new char[]{'h','e','l','l','o'};
change(str,ch);
System.out.println(str);
System.out.println(String.valueOf(ch));
}
public static void change(String str, char[] arr){
str = "change";
arr[0] = 'a';
arr[1] = 'b';
arr[2] = 'c';
arr[3] = 'd';
arr[4] = 'e';
}
这里的str和ch都是代表一个对象的引用,对于字符串来说,是有一个常量池的,world(对应的是引用的引用)和change都会对应一个地址引用,而java中形参值是不能够修改的,所以想用change的引用替换world的引用是不行的。
再稍微深入点说,形参不能修改是因为方法参数和局部变量相同,都存储在栈区(弹出即失效),可以看做是传入方法一个引用的副本,对副本做的操作当然只会在方法作用域内生效,你在change方法内在打印一次str,肯定就是change了
因为str是一个字符串变量(实参),作为参数传给change函数的时候,change函数里面的str是形参,是不会改变外面的str实参的值,因为没有返回接收这个形参str
而ch是一个字符串数组(实参),传给change函数的时候传递的是数组指向的数组的地址指针传给arr,其实arr和ch都是指向同一个地址的两个不同的名字,在change函数里面改变arr指向的地址的值,也就改变了ch指向的地址的值
希望对你有用
调用方法传参数就是把参数的值拷贝一份。