欢迎访问宙启技术站
智能推送

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函数时,需要根据数据的类型和需求选择合适的传参方式,避免因传参错误导致程序出错。