Java函数参数的传递方式都有哪些?
发布时间:2023-07-04 15:24:31
在Java中,函数参数的传递方式有值传递和引用传递。
1. 值传递:
值传递是将实际参数的值复制一份给形式参数,函数对形式参数进行操作不会改变实际参数的值。
示例代码如下:
public class ValuePassing {
public static void main(String[] args) {
int x = 10;
System.out.println("Before change: " + x); // 输出:Before change: 10
changeValue(x);
System.out.println("After change: " + x); // 输出:After change: 10
}
public static void changeValue(int value) {
value = 20;
}
}
2. 引用传递:
引用传递是将实际参数的引用(地址)复制一份给形式参数,函数对形式参数的修改会改变实际参数的值。
示例代码如下:
public class ReferencePassing {
public static void main(String[] args) {
int[] arr = {1, 2, 3};
System.out.println("Before change: " + Arrays.toString(arr)); // 输出:Before change: [1, 2, 3]
changeValue(arr);
System.out.println("After change: " + Arrays.toString(arr)); // 输出:After change: [4, 5, 6]
}
public static void changeValue(int[] array) {
for (int i = 0; i < array.length; i++) {
array[i] += 3;
}
}
}
需要注意的是,Java中的基本类型参数(如int、char等)传递的是值。而对于引用类型参数(如数组、对象等),实际上传递的是地址(引用)。
此外,对于Java中的String类型,为了避免不可变性引起的问题,也可以将其视为值传递。但实际上,String类型在传递过程中的操作只会影响新的String对象的引用,而不会改变原来的String对象。
例如:
public class StringPassing {
public static void main(String[] args) {
String str = "Hello";
System.out.println("Before change: " + str); // 输出:Before change: Hello
changeValue(str);
System.out.println("After change: " + str); // 输出:After change: Hello
}
public static void changeValue(String s) {
s += " World";
}
}
从输出结果可以看出,虽然在changeValue方法中对s进行了修改,但是并没有改变str的值。这是因为String类型是不可变的,对其进行修改实际上是创建了一个新的String对象。
