Java函数中参数传递的两种方式:值传递和引用传递
发布时间:2023-07-30 07:26:47
在Java中,参数传递有两种方式:值传递(Pass by Value)和引用传递(Pass by Reference)。
值传递是指在方法调用时,将实际参数的值复制一份传递给了形式参数,方法内部对形参的修改不会影响到实参的值。例如:
public class Main {
public static void main(String[] args) {
int num = 10;
System.out.println("调用前num的值:" + num);
changeValue(num);
System.out.println("调用后num的值:" + num);
}
public static void changeValue(int value) {
value = 20;
}
}
运行结果:
调用前num的值:10 调用后num的值:10
可以看到,changeValue方法中将value的值修改为20,但并没有影响到num的值。
引用传递是指在方法调用时,将实际参数的引用地址传递给了形式参数,方法内部对形参的修改会影响到实参的值。例如:
public class Main {
public static void main(String[] args) {
int[] arr = new int[]{1, 2, 3, 4, 5};
System.out.println("调用前数组的 个元素值:" + arr[0]);
changeValue(arr);
System.out.println("调用后数组的 个元素值:" + arr[0]);
}
public static void changeValue(int[] array) {
array[0] = 100;
}
}
运行结果:
调用前数组的 个元素值:1 调用后数组的 个元素值:100
可以看到,changeValue方法中将array数组的 个元素修改为100,导致原来数组中的 个元素被修改。
值传递和引用传递在方法调用时,对于基本数据类型的参数使用值传递,对于对象类型的参数使用引用传递。但需要注意的是,Java中的参数传递都是值传递,即传递的是实际参数的值,而不是变量本身。对于基本数据类型的值传递,传递的是该值的副本;而对于引用类型的值传递,传递的是该引用的副本,但副本中存储的是同一个地址,所以在方法中修改引用类型的形参会影响到实参。
需要注意的一点是,在Java中并没有真正的引用传递,而是通过复制引用地址来达到类似引用传递的效果。这也是为了确保Java程序的安全性,防止意外修改实参的值。
