方法的传参机制
先贴一段代码,查看一下运行结果
import java.util.Arrays;
public class test {
public static void main(String[] args) {
int i = 1;
String s = "hello";
Integer num = 200;
int[] array = {1,2,3,4,5};
Myclass my = new Myclass();
change(i,s,num,array,my);
System.out.println("i = " + i);
System.out.println("s = " + s);
System.out.println("num = " + num);
System.out.println("array = " + Arrays.toString(array));
System.out.println("my.a = " + my.a);
}
public static void change(int j, String str, Integer n, int a[], Myclass m){
j+=1;
str += "world";
n += 1;
a[0] += 1;
m.a += 1;
}
}
class Myclass{
int a = 8;
}
接下来进行分析
首先要明确两个要点:
- 若形参是基本数据类型,则我们传递的是数据值
- 若形参是引用数据类型,则我们传递的是地址值
我们先画出相应的内存区域(地址是随便写的)
然后我们在执行change方法的时候,进行相应的参数传递,遵照上面两个原则,
基本数据类型int 传递的是数据值,其余传递的都是地址值:
接下来进行相应的运算,我们可以发现直接传递数据的基本类型并没有发生改变,而直接传递地址并修改对应值的变量都发生了相应的改变(例如Mycalss的a,以及数组a[0]),而num与str有点特殊,因为str在进行字符串拼接的时候,会在常量池创建出一个新的常量,并且将相应变量地址变为新的字符串地址,因此str的地址也别发生相应的改变,而原地址所指向的常量并没有发生对应的改变,还是hello
num同理