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

Java函数的参数传递方式及其差异性

发布时间:2023-06-13 14:01:54

Java中函数的参数传递方式有两种,分别是 值传递 和 引用传递。两者的区别在于传递的是变量的值还是变量在内存中的地址。本文将详细介绍这两种传递方式及其差异性。

一、值传递

值传递指的是把实参的值复制一份传递给形参,函数内对形参进行操作不会影响实参的值。Java中所有的基本数据类型(int、float、double、char等)都是以值传递的方式传递的,例如:

public class ValueDemo {
    public static void main(String[] args) {
        int num = 10;
        update(num);
        System.out.println("num=" + num);//输出结果为num=10
    }

    public static void update(int num) {
        num = 20;
    }
}

上述代码中,在main方法中定义了一个int类型的变量num,并赋初始值为10。调用update方法,将num作为实参传递给update方法,update方法中将形参num的值改为20。但是在输出num的值时,仍然是原来的值10,并没有被修改。

二、引用传递

引用传递指的是把实参在内存中的地址传递给形参,形参指向实参所在的内存地址,函数内对形参进行的操作会影响到实参的值。Java中所有的对象类型(String、数组、自定义类等)都是以引用传递的方式传递的,例如:

public class ReferenceDemo {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3};
        update(arr);
        System.out.println(Arrays.toString(arr));//输出结果为[2, 4, 6]
    }

    public static void update(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            arr[i] *= 2;
        }
    }
}

上述代码中,在main方法中定义了一个int类型的数组arr,并赋初始值{1,2,3}。调用update方法,将arr作为实参传递给update方法,update方法中遍历数组将每个元素乘以2。在输出arr的值时,可以看到其值已经被修改为{2,4,6}。

三、值传递与引用传递的差异

1. 变量类型的差异

值传递传递的是变量的值,而引用传递传递的是变量在内存中的地址,因此Java中所有的基本数据类型都是值传递,所有的对象类型都是引用传递。

2. 影响范围的差异

值传递对实参没有影响,函数内部对形参进行的操作不会影响实参的值;而引用传递会对实参产生影响,函数内部对形参进行的操作会影响实参的值。

3. 内存空间的差异

值传递传递的是实参的副本,会在栈内存中重新开辟一块内存空间存储形参的值;而引用传递传递的是实参在堆内存中的地址,不会重新开辟内存空间。

四、总结

Java中的函数参数传递方式有两种——值传递和引用传递。值传递传递的是变量的值,引用传递传递的是变量在内存中的地址。Java中所有的基本数据类型都是值传递,所有的对象类型都是引用传递。值传递对实参没有影响,函数内部对形参进行的操作不会影响实参的值;而引用传递会对实参产生影响,函数内部对形参进行的操作会影响实参的值。在实际应用中需要根据具体的情况选择合适的参数传递方式。