📜  在Java中按值调用和按引用调用(1)

📅  最后修改于: 2023-12-03 15:37:36.231000             🧑  作者: Mango

在Java中按值调用和按引用调用

在Java中,参数传递有两种方式:按值调用和按引用调用。这两种方式的区别在于参数在传递时是复制了值还是复制了引用。

按值调用

按值调用指,在方法调用时,传递的参数是值的一个副本。也就是说,原始参数的值不会受到方法调用的影响。例如:

public static void main(String[] args) {
    int num = 10;
    test(num);
    System.out.println(num); // 输出 10
}

public static void test(int n) {
    n = n + 1;
}

在上面的示例中,main 方法中的 num 值为 10,调用 test 方法时,将 num 的值复制给 ntest 方法中对 n 的更改不会影响 num 的值,所以最终输出的是 10。

按引用调用

按引用调用指,在方法调用时,传递的参数是一个引用的副本。也就是说,原始引用所指向的对象可以被方法调用所改变。例如:

public static void main(String[] args) {
    int[] arr = new int[]{1, 2, 3};
    test(arr);
    System.out.println(Arrays.toString(arr)); // 输出 [2, 3, 4]
}

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

在上面的示例中,main 方法中的 arr 引用指向一个包含三个元素的数组。调用 test 方法时,将 arr 的值复制给 arraytest 方法中对 array 所指向的数组元素进行了更改,所以最终输出的是 [2, 3, 4]

总结

按值调用:方法传入的参数是值的一个副本,原始参数不会受到方法调用的影响。

按引用调用:方法传入的参数是引用的一个副本,原始引用所指向的对象可以被方法调用所改变。