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中的基本数据类型(如int、float等)属于传值方式,而对象类型(如数组、类对象等)属于传引用方式。这是因为基本数据类型是直接存储在栈中的,而对象类型则是存储在堆中,变量只是引用了该对象的地址。因此,在修改对象类型参数时,会改变对象本身的值。但是,如果在函数内部将对象参数指向新的对象,原参数不会发生改变,因为函数内部重新指向的是新的地址,而不是原有的地址。
总结:在Java中,参数传递方式取决于参数的数据类型。基本数据类型使用传值方式,调用函数时会创建参数值的副本;对象类型使用传引用方式,调用函数时传递对象的引用地址,可以修改对象本身的值。
