了解Java函数的参数传递方式及其区别
发布时间:2023-05-19 21:25:46
Java函数的参数传递方式有两种:值传递和引用传递。它们之间的区别在于传递的是变量的值还是变量的引用。
值传递
值传递是指将实际参数的值复制一份传递给函数的形式参数,函数对形式参数的操作不会影响到实际参数。 Java中的基本数据类型(int、double、char、boolean等)和字符串类型都是以值传递的方式传递的,如下面的示例:
public class Test {
public static void main(String[] args) {
int num1 = 1;
int num2 = 2;
swap(num1, num2);
System.out.println(num1 + " " + num2);
}
public static void swap(int a, int b) {
int temp = a;
a = b;
b = temp;
}
}
运行结果是:1 2,不是我们预期的2 1,说明在swap方法内部交换后只改变了a和b的值,而没有改变实际参数num1和num2的值。
引用传递
引用传递是指将实际参数的引用传递给函数的形式参数,函数对形式参数的操作会直接影响到实际参数。Java中的对象类型(包括数组)都是以引用传递的方式传递的,如下面的示例:
public class Test {
public static void main(String[] args) {
int[] nums = {1, 2};
swap(nums, 0, 1);
System.out.println(nums[0] + " " + nums[1]);
}
public static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
运行结果是:2 1,说明在swap方法内部交换后成功改变了实际参数nums的值。
区别
值传递和引用传递之间的区别在于传递的是变量的值还是引用,如果传递的是变量的值,则形式参数是实际参数的一个副本,对形式参数的任何改变不会影响实际参数;反之,如果传递的是变量的引用,则形式参数和实际参数代表同一块内存空间,对形式参数的任何改变都会影响实际参数。
需要注意的是,在Java中,实际参数和形式参数都是局部变量,即在函数内部定义,其作用域仅限于函数体中。因此,如果在函数内部修改了形式参数的值,不会影响到函数外部的实际参数。
