Java中关于函数的参数传递方式
发布时间:2023-11-26 19:57:57
在Java中,函数的参数传递方式分为值传递和引用传递。
1. 值传递:值传递是指将参数的值复制给一个新的变量,然后将这个新的变量传递给函数。在函数内部修改这个参数的值不会影响原来的变量。
例如:
public class Main {
public static void main(String[] args) {
int x = 5;
changeValue(x);
System.out.println("x = " + x); // 输出 x = 5
}
public static void changeValue(int value) {
value = value + 10;
}
}
在上面的例子中,虽然在changeValue方法中修改了value的值,但是这个修改不会影响到main方法中的变量x。
2. 引用传递:引用传递是指将参数的引用传递给函数,函数内部可以通过这个引用来修改参数的值。引用传递的本质是传递了变量的地址。
例如:
public class Main {
public static void main(String[] args) {
int[] arr = {1, 2, 3};
changeArray(arr);
System.out.println("arr[0] = " + arr[0]); // 输出 arr[0] = 10
}
public static void changeArray(int[] array) {
array[0] = 10;
}
}
在上面的例子中,main方法中的数组arr的地址被传递给了changeArray方法,changeArray方法通过这个地址修改了数组的值,所以在main方法中打印时,数组的值已经被修改为10。
需要注意的是,虽然在Java中通过引用传递可以修改参数的值,但是无法更改传入对象的引用本身。也就是说,如果在函数内部重新给参数赋值(创建一个新的对象)是不会改变原来的变量。
例如:
public class Main {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("Hello");
changeReference(sb);
System.out.println(sb.toString()); // 输出 Hello
}
public static void changeReference(StringBuilder s) {
s = new StringBuilder("World");
}
}
在上面的例子中,虽然在changeReference方法中重新给s赋值了一个新的StringBuilder对象,但是这个改变并不会影响原来的变量sb,所以在main方法中打印时,仍然是原来的值。
综上所述,Java中函数的参数传递方式有值传递和引用传递两种,值传递是复制参数的值传递给函数,引用传递是传递变量的地址。无论是值传递还是引用传递,在函数内部修改参数的值不会影响原来的变量,但是引用传递可以通过引用来修改对象的值。
