方法的参数传递机制
对于传递方式先给出结论:
基本数据类型:传递值
引用数据类型:传递地址,String、包装类等对象不可变性
下面用例子来说说明:
public class Test {
public static void main(String[] args) {
int i = 1;
String str = "hello";
Integer num = 200;
int[] arr = {1, 2, 3, 4, 5};
MyData my = new MyData();
change(i, str, num, arr, my);
System.out.println("i=" + i);
System.out.println("str=" + str);
System.out.println("num=" + num);
System.out.println("arr=" + Arrays.toString(arr));
System.out.println("my=" + my.a);
}
public static void change(int j, String s, Integer n, int[] a, MyData m){
j += 1;
s += "world";
n += 1;
a[0] += 1;
m.a += 1;
}
}
class MyData {
int a = 10;
}
运行结果:
那么在JVM中的状态如下图
运行change(i, str, num, arr, my);
时传递的参数是怎样呢?
int j
可以看到改变的是参数j的“值”实际i还是1。
String s
由于字符串和包装类不可变性,String拼接会产生新的对象,也就是新的地址指向新的helloword。
Integer n
同理产生新对象=>新地址指向新对象201
int [a]
传递的地址不变指向的对象中的元素发生改变
MyData m
传递的地址不变,指向的对象元素改变
综上所述,最后打印结果就是