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

Java中的函数参数:值传递与引用传递的区别

发布时间:2023-06-14 17:23:06

Java中的函数参数传递有两种方式:值传递和引用传递。值传递表示实际传递给函数的是变量的副本,而引用传递表示实际传递给函数的是变量的地址。

对于值传递,函数中对参数的改变并不会影响到原来的变量。这是因为实参在传递时把自己的值赋给形参,形参的改变不会影响实参。例如:

public class Main {
    public static void main(String[] args) {
        int n = 10;
        System.out.println("before change: " + n); // 输出10
        change(n);
        System.out.println("after change: " + n); // 输出10
    }
    public static void change(int i) {
        i = i + 5;
    }
}

在上面的例子中,我们在main函数中声明了一个整数变量n,并给它赋值为10。然后我们调用了change函数,把n作为参数传递给change函数。在change函数中,我们对参数i的值做了改变,但是这一改变并不会反映到main函数中的实参n上。

对于引用传递,函数中对参数的改变会影响到原来的变量。这是因为实参在传递时把自己的地址赋给形参,形参就可以通过这个地址间接地操作实参。例如:

public class Main {
    public static void main(String[] args) {
        int[] a = {1, 2, 3};
        System.out.println("before change: " + Arrays.toString(a)); // 输出[1, 2, 3]
        change(a);
        System.out.println("after change: " + Arrays.toString(a)); // 输出[2, 4, 6]
    }
    public static void change(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            arr[i] *= 2;
        }
    }
}

在上面的例子中,我们在main函数中声明了一个整数数组a,并赋值为[1, 2, 3]。然后我们调用了change函数,把a作为参数传递给change函数。在change函数中,我们对参数arr所指向的数组中的每个元素都做了乘2的操作。这一改变反映到了main函数中的实参a上。

需要注意的一点是,在Java中,只有对象才能进行引用传递,基本数据类型(如intfloat等)与字符串类型(String)等并非对象,因此进行函数参数传递时都是按值传递的方式。

总之,在Java中,函数参数传递的方式有值传递和引用传递两种方式。这两种方式的区别关键在于是否能够改变原来变量的值。如果是值传递,则函数中对参数的改变不会影响到原来变量的值;如果是引用传递,则函数中对参数的改变会影响到原来变量的值。