Java函数传参的方式及其区别
发布时间:2023-05-28 04:50:25
Java函数传参是指在函数调用时,将一个或多个数据以某种方式传递给函数,供函数使用。Java函数传参的方式有值传递和引用传递两种。下面分别介绍它们的区别。
1. 值传递
值传递是指将原始数据(如基本数据类型)复制一份,在函数内部对这份副本进行操作,而不影响原始数据。简单来说,值传递就是将参数的值复制给函数的形参。
例如,下面的代码中,函数f()的参数a是一个int类型的数据,当调用函数f(20)时,实参20会被复制一份给函数的形参a,函数内部对a的改变不会影响原始数据20。
public static void f(int a) {
a = a + 1;
System.out.println("函数内部:a = " + a);
}
public static void main(String[] args) {
int a = 20;
f(a);
System.out.println("函数外部:a = " + a);
}
输出结果为:
函数内部:a = 21 函数外部:a = 20
可以看到,函数内部对a的修改并没有影响到函数外部的变量a。
2. 引用传递
引用传递是指将原始数据的地址(如对象、数组)复制一份,在函数内部使用这份副本操作原始数据。简单来说,引用传递就是将参数的地址复制给函数的形参。
例如,下面的代码中,函数f()的参数a是一个数组类型的数据,当调用函数f(arr)时,实参arr的地址会被复制一份给函数的形参a,指向相同的数组对象,函数内部对a指向的数组对象的改变会影响到原始数据。
public static void f(int[] a) {
a[0] = a[0] + 1;
System.out.println("函数内部:a[0] = " + a[0]);
}
public static void main(String[] args) {
int[] arr = {1, 2, 3};
f(arr);
System.out.println("函数外部:arr[0] = " + arr[0]);
}
输出结果为:
函数内部:a[0] = 2 函数外部:arr[0] = 2
可以看到,函数内部对a指向的数组对象的修改同样作用到了原始数据arr数组。
3. 区别
值传递与引用传递的区别在于传递的数据类型不同,值传递传递的是原始数据的值,而引用传递传递的是原始数据的地址。
由于值传递传递的是复制品,所以函数内部对参数的修改不会影响原始数据,而引用传递传递的是原始数据的地址,所以函数内部对参数指向的数据对象的修改会影响原始数据。
简单总结一下:
- 值传递复制原始数据的值,不影响原始数据;
- 引用传递复制原始数据的地址,影响原始数据。
在使用Java函数时,需要根据数据的类型和需求选择合适的传参方式,避免因传参错误导致程序出错。
