欢迎访问宙启技术站
智能推送

理解Java中的参数传递:值传递和引用传递的区别

发布时间:2023-06-04 09:00:39

Java中的参数传递分为值传递和引用传递两种方式。这两种传递方式的区别在于传递的是变量的值还是变量的地址。

值传递:

值传递是指将实际参数的值传递给函数的形式参数。在函数内部,形式参数是实际参数的一个副本,修改形式参数的值不会影响实际参数的值。例如:

public void changeValue(int num) {
   num = 10;
   System.out.println("在方法中修改后的值:" + num);
}
int value = 5;
changeValue(value);
System.out.println("调用方法后的值:" + value);

输出结果为:

在方法中修改后的值:10
调用方法后的值:5

可以看到,虽然在函数内部修改了形式参数的值,但传递的实际参数并没有受到影响。

引用传递:

引用传递是指将实际参数的地址传递给函数的形式参数。在函数内部,形式参数和实际参数指向同一个地址,修改形式参数的值会影响实际参数的值。例如:

public void changeReferenceValue(int[] arr) {
   arr[0] = 2;
   System.out.println("在方法中修改后的值:" + arr[0]);
}
int[] array = {1, 2, 3};
changeReferenceValue(array);
System.out.println("调用方法后的值:" + array[0]);

输出结果为:

在方法中修改后的值:2
调用方法后的值:2

可以看到,虽然在函数内部修改了形式参数的值,但实际参数的值也随之改变了。

总结:

一般来说,Java中的基本数据类型(int、float、double等)都是通过值传递的方式传递参数,而对象类型(包括数组)则是通过引用传递的方式传递参数。这是因为基本数据类型是存放在堆栈中的,而对象类别是存放在堆中的,通过传递对象的引用可以让方法内部访问到该对象。

需要注意的是,在Java中并不存在传递引用这种说法,只有传递对象的引用。因为传递对象的引用时,实际参数和形式参数指向的是同一个对象,而不是同一个引用。因此,虽然在方法内部修改了形式参数的值,但并没有改变实际参数所指向的对象。