一、值传递:是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。
代码在内存中的执行流程:
1、首先加载main方法;
2、接下来int number = 100;
3、输出调用前的number,结果为100;
4、调用change方法;
5、在change方法中传参,传的是number,值为100;
6、在change方法中对其number修改其值为200;
虽然方法中的number的确改为200,但是main方法中的number的值是没有改变的。
7、change方法调用完毕,然后就从栈内存消失;
8、接下来输出number,而number在main方法中的值还是100;
9、main方法结束,从栈内存中消失
总结:对于基本数据类型的参数,形式参数的改变,不影响实际参数的值。
二、引用传递:是指在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。
代码在内存中的执行流程:
1、加载main方法;
2、定义int类型的数组,=左边的加载到栈内存,=右边的加载到堆内存,堆内存中地址001给栈内存;
3、 输入arr[1],在栈内存中通过001地址找到堆内存中001,再通过索引找到arr[1]的值为20,在输出其值为20;
4、调用change方法,change方法加载到占内存,再将形参int[ ] arr加载到change方法中,形参int[ ] arr是有main方法中传递过来的,传递的是地址001,再去修改arr[1]的值,通过在栈中的地址001,找到堆内存中的地址001,通过索引找到其对应的值,并修改其值为200
5、change方法调用完毕,在栈内存中消失;
6、接下来输出调用change方法后的值,这时值已经改变,鼠疫出书的值为200;
7、main方法结束,从栈内存中消失;
总结:对于引用类型的参数传递,形式参数的改变,影响实际参数的值。