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

讲解Java中常见的函数参数传递方式

发布时间:2023-11-19 19:32:26

在Java中,函数参数传递方式主要有值传递和引用传递两种。

1. 值传递(Pass by Value):

值传递是指将实际参数的值复制一份传递给函数,在函数内部对参数的任何修改都不会影响到实际参数的值。Java中基本数据类型都是通过值传递来传递参数的。下面是一个例子:

public class Test {
    public static void main(String[] args) {
        int a = 10;
        multiply(a);
        System.out.println(a); // 输出:10
    }

    public static void multiply(int number) {
        number = number * 2;
    }
}

在上面的例子中,multiply()函数接收的参数是一个整数,当我们调用multiply(a)时,会将变量a的值10复制一份传递给number,然后在函数内部将number的值乘2,但是这个修改并不会影响到变量a的值。

2. 引用传递(Pass by Reference):

引用传递是指将实际参数在内存中的地址传递给函数,通过操作内存中的地址来修改实际参数的值。在Java中,对象类型的变量(包括数组)都是通过引用传递来传递参数的。下面是一个例子:

public class Test {
    public static void main(String[] args) {
        int[] array = {1, 2, 3};
        increase(array);
        System.out.println(array[0]); // 输出:2
    }

    public static void increase(int[] numbers) {
        for (int i = 0; i < numbers.length; i++) {
            numbers[i]++;
        }
    }
}

在上面的例子中,increase()函数接收的参数是一个整数数组,当我们调用increase(array)时,会将数组array在内存中的地址传递给numbers,然后在函数内部通过修改numbers数组的元素来改变实际参数array的值。

需要注意的是,在引用传递中,虽然可以修改实际参数的值,但是不能改变实际参数的引用,即不能让numbers指向新的内存地址。例如:

public class Test {
    public static void main(String[] args) {
        int[] array1 = {1, 2, 3};
        int[] array2 = {4, 5, 6};
        swap(array1, array2);
        System.out.println(array1[0]); // 输出:1
        System.out.println(array2[0]); // 输出:4
    }

    public static void swap(int[] a, int[] b) {
        int[] temp = a;
        a = b;
        b = temp;
    }
}

在上面的例子中,虽然在swap()函数内部交换了a和b的值,但是并没有改变实际参数array1和array2的引用地址,所以函数外部array1和array2的值没有被改变。

综上所述,Java中常见的函数参数传递方式有值传递和引用传递两种。值传递适用于基本数据类型,而引用传递适用于对象类型。