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

了解Java参数传递方式调用函数

发布时间:2023-06-17 21:00:06

Java是一门面向对象的编程语言,常用于开发Web应用程序、移动应用程序等。在Java中,函数通常用于封装一些可重用的代码块,然后可以通过调用函数的方式来执行这些代码块。在Java中,函数的参数传递方式有两种:值传递和引用传递。

值传递

在Java中,值传递是指将函数参数的值复制一份,然后传递给函数。在函数内部,对函数参数进行任何修改都不会影响函数外部的实参。这是因为在Java中,基本数据类型都是按照值传递的方式传递的。

例如,下面的代码演示了在Java中如何使用值传递方式传递参数:

public class Test {
    public static void main(String[] args) {
        int a = 10;
        System.out.println("a before call:" + a);
        changeValue(a);
        System.out.println("a after call:" + a);
    }

    public static void changeValue(int num) {
        num = 20;
        System.out.println("num in changeValue:" + num);
    }
}

输出结果如下:

a before call:10
num in changeValue:20
a after call:10

可以看到,当调用changeValue()函数时,a的值被复制给了num,在函数内部将num的值修改为20,但是a的值并没有发生改变。

引用传递

在Java中,对象引用类型的数据是按照引用传递的方式传递的,这意味着传递给函数的是实参的地址,而不是实参的值。

例如,下面的代码演示了在Java中如何使用引用传递方式传递参数:

public class Test {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3};
        System.out.println("arr before call:" + Arrays.toString(arr));
        changeArr(arr);
        System.out.println("arr after call:" + Arrays.toString(arr));
    }

    public static void changeArr(int[] arr) {
        arr[0] = 10;
        System.out.println("arr in changeArr:" + Arrays.toString(arr));
    }
}

输出结果如下:

arr before call:[1, 2, 3]
arr in changeArr:[10, 2, 3]
arr after call:[10, 2, 3]

可以看到,当调用changeArr()函数时,arr的地址被复制给了形参arr,在函数内部修改了arr[0]的值为10,这样会改变原数组的值。

对象引用类型的数据,虽然是按照引用传递的方式传递地址,但是在函数内部对引用类型的数据进行重新赋值,是不会影响函数外部的实参的。

例如:

public class Test {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3};
        System.out.println("arr before call:" + Arrays.toString(arr));
        resetArr(arr);
        System.out.println("arr after call:" + Arrays.toString(arr));
    }

    public static void resetArr(int[] arr) {
        arr = new int[]{4, 5, 6};
        System.out.println("arr in resetArr:" + Arrays.toString(arr));
    }
}

输出结果如下:

arr before call:[1, 2, 3]
arr in resetArr:[4, 5, 6]
arr after call:[1, 2, 3]

可以看到,当调用resetArr()函数时,arr的地址被复制给了形参arr,在函数内部重新赋值了一个新的数组,但是并没有改变原数组的值。

总结

在Java中,函数的参数传递方式有两种:值传递和引用传递。值传递是指将函数参数的值复制一份,然后传递给函数,对函数参数进行任何修改都不会影响函数外部的实参;引用传递是指将对象引用类型的数据的地址传递给函数,会改变原数据的值,但是在函数内部对引用类型的数据进行重新赋值,是不会影响函数外部的实参的。了解Java参数传递方式调用函数非常重要,可以避免一些在函数调用时出现的意外错误。