如以下代码,为什么两个change方法,都是返回的void,但map的值却变了,string的值没变,这是为何?
public class Test {
public static void main(String[] args) {
Map map = new HashMap();
map.put("a", "123");
change(map);
System.out.println(map);
String a = "aaa";
change(a);
System.out.println(a);
}
private static void change(String a) {
a = "bbb";
}
private static void change(Map map) {
map.put("b", "456");
}
}
输出:
{b=456, a=123}
aaa
Java参数:不管是原始类型还是引用类型,传递的都是副本(有另外一种说法是传值,传值一般相对于传地址而言)
若参数类型是基本数据类型,那么传过来的就是这个参数的一个副本,也就是这个原始参数的值,这个跟之前所谈的传值是一样的。如果在函数中改变了副本的值不会改变原始的值
若参数类型是引用类型,那么传过来的就是这个引用参数的副本,这个副本存放的是参数的地址,如果在函数中没有改变这个副本的地址,而是改变了地址中的值,那么在函数内的改变会影响到传入的参数。如果在函数中改变了副本的地址,如new了一个,那么副本就指向了新的地址,此时传入的参数还是指向原来的地址,所以不会改变原来的值。
一般而言,当你传递的是八大基本数据类型,在方法里面怎么变化都不会影响到外部的值
但是引用类型就不一样,因为你传递进去的是地址,你在方法内部修改,外部也会随机变化
如有帮助,望采纳
对象引用