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

Java函数中参数传递的两种方式:值传递和引用传递

发布时间:2023-07-30 07:26:47

在Java中,参数传递有两种方式:值传递(Pass by Value)和引用传递(Pass by Reference)。

值传递是指在方法调用时,将实际参数的值复制一份传递给了形式参数,方法内部对形参的修改不会影响到实参的值。例如:

public class Main {
    public static void main(String[] args) {
        int num = 10;
        System.out.println("调用前num的值:" + num);
        changeValue(num);
        System.out.println("调用后num的值:" + num);
    }

    public static void changeValue(int value) {
        value = 20;
    }
}

运行结果:

调用前num的值:10
调用后num的值:10

可以看到,changeValue方法中将value的值修改为20,但并没有影响到num的值。

引用传递是指在方法调用时,将实际参数的引用地址传递给了形式参数,方法内部对形参的修改会影响到实参的值。例如:

public class Main {
    public static void main(String[] args) {
        int[] arr = new int[]{1, 2, 3, 4, 5};
        System.out.println("调用前数组的      个元素值:" + arr[0]);
        changeValue(arr);
        System.out.println("调用后数组的      个元素值:" + arr[0]);
    }

    public static void changeValue(int[] array) {
        array[0] = 100;
    }
}

运行结果:

调用前数组的      个元素值:1
调用后数组的      个元素值:100

可以看到,changeValue方法中将array数组的 个元素修改为100,导致原来数组中的 个元素被修改。

值传递和引用传递在方法调用时,对于基本数据类型的参数使用值传递,对于对象类型的参数使用引用传递。但需要注意的是,Java中的参数传递都是值传递,即传递的是实际参数的值,而不是变量本身。对于基本数据类型的值传递,传递的是该值的副本;而对于引用类型的值传递,传递的是该引用的副本,但副本中存储的是同一个地址,所以在方法中修改引用类型的形参会影响到实参。

需要注意的一点是,在Java中并没有真正的引用传递,而是通过复制引用地址来达到类似引用传递的效果。这也是为了确保Java程序的安全性,防止意外修改实参的值。