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

Java中传递参数的方式

发布时间:2023-06-17 02:58:04

Java中的参数传递方式有三种:值传递、引用传递和引用传递的副本。

1. 值传递

值传递是指将参数的值复制一份,然后将复制的值传递给调用方法。在方法中,对该参数的任何修改都不会影响调用方法中原始的值。

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

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

在上面的代码中,调用swap方法传递了两个参数num1和num2。在swap方法中,参数a和b是num1和num2的副本,swap方法对a和b值的修改不会影响调用方法中的num1和num2的值。

2. 引用传递

引用传递是指将参数的引用复制一份,然后将复制的引用传递给调用方法。在方法中,对该参数的任何修改都会影响调用方法中原始的引用指向的对象。

public class Main {
    public static void main(String[] args) {
        int[] array = new int[]{1, 2, 3};
        addOne(array);
        System.out.println(Arrays.toString(array));
    }

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

在上面的代码中,调用addOne方法传递了一个数组参数array。在addOne方法中,参数arr是array的副本,但是arr和array引用了同一个数组对象。addOne方法对arr引用的数组对象进行修改,发生的改变同样影响调用方法中的array的值。

3. 引用传递的副本

在某些情况下,需要保留对原始对象的引用,同时在方法中对引用复制进行修改。这时可以使用引用传递的副本方式,即将参数的引用创建一个副本,然后将副本传递给调用方法。在方法中,对该参数的任何修改都会影响副本引用指向的对象,但不会影响调用方法中原始的引用。

public class Main {
    public static void main(String[] args) {
        int[] array = new int[]{1, 2, 3};
        int[] copy = Arrays.copyOf(array, array.length);
        addOne(copy);
        System.out.println(Arrays.toString(array));
        System.out.println(Arrays.toString(copy));
    }

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

在上面的代码中,调用addOne方法传递了一个数组参数copy,该数组是通过Arrays类中的copyOf方法复制的,复制的数组和原始的数组引用不同的对象。在addOne方法中,参数arr是copy的副本引用,对arr引用的数组对象进行修改仅影响副本,不改变调用方法中原始的array的值。