Java中函数的参数传递
Java中的函数参数传递指的是将实际参数传递给函数中的形式参数。这个过程也称为参数传递或者实参传递。在Java中有两种参数传递方式,分别是值传递和引用传递。
一、值传递
所谓值传递就是传递参数时,传递的是实际参数的值,而不是实际参数的地址。在函数内部修改形式参数的值,不会改变实际参数的值。因为在函数内部使用的是形式参数的副本,对形式参数的修改不会影响实际参数的值。
下面是值传递的示例代码:
public class ValueTransferTest {
public static void main(String[] args) {
int a = 10;
int b = 20;
ValueTransferTest test = new ValueTransferTest();
System.out.println("a=" + a + ",b=" + b);
test.swap(a, b);
System.out.println("a=" + a + ",b=" + b);
}
public void swap(int a, int b) {
int temp = a;
a = b;
b = temp;
}
}
运行结果为:
a=10,b=20
a=10,b=20
可以看到,在swap方法内部对形式参数a和b进行了交换,但是实际参数a和b的值并没有改变,仍然是10和20。
二、引用传递
所谓引用传递就是传递参数时,传递的是实际参数的地址或引用。在函数内部修改形式参数的值,会改变实际参数的值。因为在函数内部使用的是实际参数的地址或引用,对形式参数的修改会影响实际参数的值。
下面是引用传递的示例代码:
public class ReferenceTransferTest {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5};
ReferenceTransferTest test = new ReferenceTransferTest();
System.out.println("before modify,arr[0]=" + arr[0]);
test.modify(arr);
System.out.println("after modify,arr[0]=" + arr[0]);
}
public void modify(int[] arr) {
arr[0] = 10;
}
}
运行结果为:
before modify,arr[0]=1
after modify,arr[0]=10
可以看到,在modify方法内部将形式参数arr的 个元素修改为10后,实际参数arr的 个元素也变成了10。
需要注意的是,在Java中并没有所谓的指针传递,因为Java中的所有变量都是引用类型,其实是某个对象的引用而已。因此,在函数中如果修改的是对象的属性,也是会改变实际参数的值的,因为对象的属性是存储在堆内存中的。
总结:
Java中的参数传递分为值传递和引用传递。如果传递的是基本数据类型的变量,那么采用的是值传递方式,函数内部修改的是形式参数的副本,不会影响实际参数的值。如果传递的是引用类型的变量,那么采用的是引用传递方式,函数内部使用的是实际参数的地址或引用,对形式参数的修改会影响实际参数的值。无论是值传递还是引用传递,都是将实际参数的值传递给函数的形式参数。
