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

Java中函数(方法)的参数传递方式是什么?

发布时间:2023-07-06 08:46:48

在Java中,函数(方法)的参数传递方式有两种:传值和传引用。

1. 传值(Pass by value):

在传值方式中,函数调用时会创建一个新的变量副本,并将实际参数的值复制给新的变量副本。即在函数内部修改参数的值不会影响实际参数的值。

例如:

public class PassByValueExample {
    public static void main(String[] args) {
        int num = 10;
        System.out.println("Before function call: " + num);

        changeValue(num);

        System.out.println("After function call: " + num);
    }

    public static void changeValue(int n) {
        n = 20;
        System.out.println("Inside function: " + n);
    }
}

输出结果:

Before function call: 10
Inside function: 20
After function call: 10

可以看到,虽然函数内部的changeValue方法将参数n的值修改为20,但原变量num的值并未受到影响。

2. 传引用(Pass by reference):

在传引用方式中,函数调用时会将实际参数的引用地址传递给函数,并对实际参数进行修改。即在函数内部修改参数的值也会影响到实际参数的值。

例如:

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

        changeValue(arr);

        System.out.println("After function call: " + Arrays.toString(arr));
    }

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

输出结果:

Before function call: [1, 2, 3]
Inside function: [10, 2, 3]
After function call: [10, 2, 3]

可以看到,函数内部的changeValue方法将数组参数arr的 个元素修改为10,原数组arr的值也相应发生了改变。

需要注意的是,Java中的基本数据类型(如intfloat等)属于传值方式,而对象类型(如数组、类对象等)属于传引用方式。这是因为基本数据类型是直接存储在栈中的,而对象类型则是存储在堆中,变量只是引用了该对象的地址。因此,在修改对象类型参数时,会改变对象本身的值。但是,如果在函数内部将对象参数指向新的对象,原参数不会发生改变,因为函数内部重新指向的是新的地址,而不是原有的地址。

总结:在Java中,参数传递方式取决于参数的数据类型。基本数据类型使用传值方式,调用函数时会创建参数值的副本;对象类型使用传引用方式,调用函数时传递对象的引用地址,可以修改对象本身的值。