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

Java函数中的传引用和传值详解

发布时间:2023-06-25 04:14:47

Java是一种面向对象的编程语言,它的函数参数传递方式有两种,传值和传引用。这两种方式有所不同,会影响函数的执行结果。在Java中,基本类型的变量传递方式是传值,而引用类型的变量传递方式是传引用。下面我们将详细介绍Java函数中的传引用和传值。

传值

传值是指将实际参数的值复制一份传递给函数,函数对这份复制的值进行操作,而不会影响原来实际参数的值。Java中的基本数据类型都是传值,如int、float、double等。举个例子,比如下面的代码:

public class Main {
    public static void main(String[] args) {
        int a = 5;
        int b = 10;
        swap(a, b);
        System.out.println("a = " + a + ", b = " + b);
    }

    public static void swap(int x, int y) {
        int temp;
        temp = x;
        x = y;
        y = temp;
    }
}

运行结果是:

a = 5, b = 10

这是因为,在swap函数中,x和y是传值的,swap函数内部对x和y的交换并不会影响到函数外部的a和b。

传引用

传引用是指将实际参数的地址传递给函数,函数对这个地址所对应的值进行操作,会影响到原来实际参数的值。Java中的引用类型都是传引用,如Object、数组、String等。举个例子,比如下面的代码:

public class Main {
    public static void main(String[] args) {
        int[] a = {5};
        int[] b = {10};
        swap(a, b);
        System.out.println("a[0] = " + a[0] + ", b[0] = " + b[0]);
    }

    public static void swap(int[] x, int[] y) {
        int[] temp;
        temp = x;
        x = y;
        y = temp;
    }
}

运行结果是:

a[0] = 5, b[0] = 10

这是因为,在swap函数中,x和y是传引用的,swap函数内部对x和y的交换并不会影响到函数外部的a和b。如果我们想在swap函数内部交换a和b的值,即要改变a和b的内容,可以这样:

public class Main {
    public static void main(String[] args) {
        int[] a = {5};
        int[] b = {10};
        swap(a, b);
        System.out.println("a[0] = " + a[0] + ", b[0] = " + b[0]);
    }

    public static void swap(int[] x, int[] y) {
        int temp;
        temp = x[0];
        x[0] = y[0];
        y[0] = temp;
    }
}

这段代码的运行结果是:

a[0] = 10, b[0] = 5

我们可以看到,在swap函数中,“x[0] = y[0]”和“y[0] = temp”这两行修改了a和b的值,因为x和y是传引用的。

总结

在Java函数中,参数传递的方式有传值和传引用两种,基本数据类型传值,引用类型传引用。传值是将实际参数的值复制一份传递给函数,函数对这份复制的值进行操作,而不会影响原来实际参数的值;传引用是将实际参数的地址传递给函数,函数对这个地址所对应的值进行操作,会影响到原来实际参数的值。对于需要改变参数值的情况,我们可以使用传引用的方式完成。