在Java中方法参数传递中有两种类型,基本类型和引用类型,对应两种方法参数的传递也有相关的注意事项。
1:基本类型
对于基本类型方法参数的传递当形式参数的改变不影响实际参数的值。
package demo;
/**
* @author ln
* @date 2022/1/6
* @description 方法参数的传递(基本类型)
*/
public class AtrgsTest {
public static void main(String[] args) {
int number = 100;
System.out.println("调用change方法前:" + number);
change(number);
System.out.println("调用change方法后:" + number);
}
public static int change(int number) {
number = 200;
}
}
调用change方法前:100
调用change方法后:100
控制台两次输出的都是100,现在来解释为何会是这样。程序在第一次执行到main方法时会在栈内存中加载main方法接着再将int number = 100 加载进然后输出,当执行到调用change方法时程序会跳转到change方法,该方法中传递的参数为int number,此时为实际参数“int number = 100”传入的,所以此时change方法中的参数值为100,然后change方法继续执行将参数值修改为200,此时change方法执行完毕在栈内存中就会将该方法剔除但是main方法还没有执行完依然在栈内存中所以int number依然为100。
2:引用类型
对于引用类型形参的改变会影响实参的值。
package demo;
/**
* @author ln
* @date 2022/1/6
* @description 方法参数的传递(引用类型)
*/
public class AtrgsTest02 {
public static void main(String[] args) {
int [] arr = {10,20,30};
System.out.println("调用change方法前" + arr[1]);
change(arr);
System.out.println("调用厂方法后" + arr[1]);
}
public static void change(int [] arr) {
arr[1] = 200;
}
}
调用change方法前20
调用厂方法后200
对比基本类型之所以会是这样就是因为当代码执行到“int [] arr = {10,20,30};”时会开辟一个堆内存用于存储{10,20,30}当再执行到change方法时会通过地址在堆内存中修改arr[1]的值,change方法执行完后,堆内存中被修改内容不会发生改变所以才会如此输出。