Java中的函数参数传递方式有几种?
在Java中,函数参数传递方式有两种:值传递和引用传递。
1. 值传递
值传递是指将参数的值复制一份传递给函数。在函数内部对参数的修改并不会影响到原有参数的值。在Java中,基本数据类型(int、float、double、boolean等)都是使用值传递的方式进行参数传递。例如:
public static void changeNum(int num) {
num = 10;
}
public static void main(String[] args) {
int num = 5;
changeNum(num);
System.out.println(num); // 输出结果为 5
}
在上面的代码中,changeNum函数是一个值传递的函数,它的参数num是一个int类型的参数。当我们调用changeNum函数时,传递给它的参数num的值为5。在函数内部,我们将参数num的值修改为10,但由于使用的是值传递方式,当函数执行完毕后,原有的参数num的值仍然为5,没有发生任何变化。
2. 引用传递
引用传递是指将参数的地址传递给函数。在函数内部对参数的修改会影响到原有参数的值。在Java中,对象类型(包括自定义类、数组等)都是使用引用传递的方式进行参数传递。例如:
public static void changeArray(int[] array) {
array[0] = 10;
}
public static void main(String[] args) {
int[] array = {1, 2, 3};
changeArray(array);
System.out.println(array[0]); // 输出结果为 10
}
在上面的代码中,changeArray函数是一个引用传递的函数,它的参数array是一个int类型的数组。当我们调用changeArray函数时,传递给它的参数array的值为数组的地址。在函数内部,我们将数组的 个元素修改为10,由于使用的是引用传递方式,当函数执行完毕后,原有的参数array的 个元素的值也被修改为了10。
需要注意的是,虽然引用传递可以修改传递给函数的参数,但它并不能修改参数所指向的对象的地址。例如:
public static void changeArray(int[] array) {
array = new int[]{4, 5, 6};
}
public static void main(String[] args) {
int[] array = {1, 2, 3};
changeArray(array);
System.out.println(array[0]); // 输出结果为 1
}
在上面的代码中,changeArray函数内部我们创建了一个新的int数组,但由于参数是按照引用传递的方式进行传递的,所以当函数执行完毕后,原有的参数array并没有被修改所指向的对象的地址,因此打印出来的结果仍为1。
综上所述,Java中存在两种参数传递方式:值传递和引用传递。对于基本数据类型的参数,采用的是值传递方式,对于对象类型的参数,采用的是引用传递方式。在理解和使用时需要注意它们之间的区别和联系。
