Java中的函数参数:值传递与引用传递的区别
发布时间:2023-06-14 17:23:06
Java中的函数参数传递有两种方式:值传递和引用传递。值传递表示实际传递给函数的是变量的副本,而引用传递表示实际传递给函数的是变量的地址。
对于值传递,函数中对参数的改变并不会影响到原来的变量。这是因为实参在传递时把自己的值赋给形参,形参的改变不会影响实参。例如:
public class Main {
public static void main(String[] args) {
int n = 10;
System.out.println("before change: " + n); // 输出10
change(n);
System.out.println("after change: " + n); // 输出10
}
public static void change(int i) {
i = i + 5;
}
}
在上面的例子中,我们在main函数中声明了一个整数变量n,并给它赋值为10。然后我们调用了change函数,把n作为参数传递给change函数。在change函数中,我们对参数i的值做了改变,但是这一改变并不会反映到main函数中的实参n上。
对于引用传递,函数中对参数的改变会影响到原来的变量。这是因为实参在传递时把自己的地址赋给形参,形参就可以通过这个地址间接地操作实参。例如:
public class Main {
public static void main(String[] args) {
int[] a = {1, 2, 3};
System.out.println("before change: " + Arrays.toString(a)); // 输出[1, 2, 3]
change(a);
System.out.println("after change: " + Arrays.toString(a)); // 输出[2, 4, 6]
}
public static void change(int[] arr) {
for (int i = 0; i < arr.length; i++) {
arr[i] *= 2;
}
}
}
在上面的例子中,我们在main函数中声明了一个整数数组a,并赋值为[1, 2, 3]。然后我们调用了change函数,把a作为参数传递给change函数。在change函数中,我们对参数arr所指向的数组中的每个元素都做了乘2的操作。这一改变反映到了main函数中的实参a上。
需要注意的一点是,在Java中,只有对象才能进行引用传递,基本数据类型(如int、float等)与字符串类型(String)等并非对象,因此进行函数参数传递时都是按值传递的方式。
总之,在Java中,函数参数传递的方式有值传递和引用传递两种方式。这两种方式的区别关键在于是否能够改变原来变量的值。如果是值传递,则函数中对参数的改变不会影响到原来变量的值;如果是引用传递,则函数中对参数的改变会影响到原来变量的值。
