Java函数参数传递方式,你知道哪些?
Java函数参数传递是指在Java程序中调用函数时,如何将数据传递给函数。在Java中,有三种常见的函数参数传递方式,包括传值调用、传引用调用和传地址调用。
传值调用
传值调用是指将参数的值复制到函数的形式参数中,函数对参数值的修改不会影响到实际参数的值。例如:
public class Test {
public static void main(String args[]) {
int a = 10;
int b = 20;
swap(a, b);
System.out.println("a = " + a + ", b = " + b);
}
public static void swap(int x, int y) {
int temp = x;
x = y;
y = temp;
}
}
输出结果为:a = 10, b = 20。
在上述代码中,main函数传递了参数a和b,但在swap函数中,对传递的参数进行交换后,并不影响main函数中参数的值。
传引用调用
传引用调用是指将参数的引用(地址)复制到函数的形式参数中,函数对参数引用所指向的对象的修改会影响实际参数的值。例如:
public class Test {
public static void main(String args[]) {
int[] arr = {10, 20};
changeValue(arr);
System.out.println("arr[0] = " + arr[0] + ", arr[1] = " + arr[1]);
}
public static void changeValue(int[] array) {
int temp = array[0];
array[0] = array[1];
array[1] = temp;
}
}
输出结果为:arr[0] = 20, arr[1] = 10。
在上述代码中,main函数传递了参数arr,而在changeValue函数中,直接修改了数组中元素的值,因此会影响实际参数的值。
传地址调用
传地址调用是指将参数的地址复制到函数的形式参数中,函数对参数地址所指向的内存空间的修改会影响实际参数的值。Java中没有实现传地址调用的机制,但可以通过引用类型和对象来模拟。
引用类型可以看做指针,指向实际对象的地址。因此,对引用类型对象的操作,本质上是对指向对象的地址进行操作。例如:
public class Test {
public static void main(String args[]) {
Student stu = new Student();
stu.name = "Alice";
changeName(stu);
System.out.println("stu.name = " + stu.name);
}
public static void changeName(Student student) {
student.name = "Bob";
}
}
class Student {
public String name;
}
输出结果为:stu.name = Bob。
在上述代码中,main函数创建了一个Student对象,并将其赋值给stu引用类型变量。在changeName函数中,对传递的引用类型对象进行名称修改,将其修改为“Bob”,因此会影响实际参数的值。
总结
在Java中,传参方式分为传值调用、传引用调用和传地址调用三种。其中传值调用只是将参数的值复制到函数中,不会对实际参数造成影响;而传引用调用和传地址调用会对实际参数造成影响,前者是将参数的地址复制到函数中,后者是直接传递参数的地址。在Java中没有明确的传地址调用机制,但可以通过引用类型和对象模拟实现。对于程序员来说,需要根据实际情况来选择合适的传参方式。
