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

了解Java函数的参数传递方式及其区别

发布时间:2023-05-19 21:25:46

Java函数的参数传递方式有两种:值传递和引用传递。它们之间的区别在于传递的是变量的值还是变量的引用。

值传递

值传递是指将实际参数的值复制一份传递给函数的形式参数,函数对形式参数的操作不会影响到实际参数。 Java中的基本数据类型(int、double、char、boolean等)和字符串类型都是以值传递的方式传递的,如下面的示例:

public class Test {
    public static void main(String[] args) {
        int num1 = 1;
        int num2 = 2;
        swap(num1, num2);
        System.out.println(num1 + " " + num2);
    }
    
    public static void swap(int a, int b) {
        int temp = a;
        a = b;
        b = temp;
    }
}

运行结果是:1 2,不是我们预期的2 1,说明在swap方法内部交换后只改变了a和b的值,而没有改变实际参数num1和num2的值。

引用传递

引用传递是指将实际参数的引用传递给函数的形式参数,函数对形式参数的操作会直接影响到实际参数。Java中的对象类型(包括数组)都是以引用传递的方式传递的,如下面的示例:

public class Test {
    public static void main(String[] args) {
        int[] nums = {1, 2};
        swap(nums, 0, 1);
        System.out.println(nums[0] + " " + nums[1]);
    }
    
    public static void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}

运行结果是:2 1,说明在swap方法内部交换后成功改变了实际参数nums的值。

区别

值传递和引用传递之间的区别在于传递的是变量的值还是引用,如果传递的是变量的值,则形式参数是实际参数的一个副本,对形式参数的任何改变不会影响实际参数;反之,如果传递的是变量的引用,则形式参数和实际参数代表同一块内存空间,对形式参数的任何改变都会影响实际参数。

需要注意的是,在Java中,实际参数和形式参数都是局部变量,即在函数内部定义,其作用域仅限于函数体中。因此,如果在函数内部修改了形式参数的值,不会影响到函数外部的实际参数。