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

Java中的函数参数传递方式有几种?

发布时间:2023-06-26 14:26:13

在Java中,函数参数传递方式有两种:值传递和引用传递。

1. 值传递

值传递是指将参数的值复制一份传递给函数。在函数内部对参数的修改并不会影响到原有参数的值。在Java中,基本数据类型(int、float、double、boolean等)都是使用值传递的方式进行参数传递。例如:

public static void changeNum(int num) {
    num = 10;
}

public static void main(String[] args) {
    int num = 5;
    changeNum(num);
    System.out.println(num); // 输出结果为 5
}

在上面的代码中,changeNum函数是一个值传递的函数,它的参数num是一个int类型的参数。当我们调用changeNum函数时,传递给它的参数num的值为5。在函数内部,我们将参数num的值修改为10,但由于使用的是值传递方式,当函数执行完毕后,原有的参数num的值仍然为5,没有发生任何变化。

2. 引用传递

引用传递是指将参数的地址传递给函数。在函数内部对参数的修改会影响到原有参数的值。在Java中,对象类型(包括自定义类、数组等)都是使用引用传递的方式进行参数传递。例如:

public static void changeArray(int[] array) {
    array[0] = 10;
}

public static void main(String[] args) {
    int[] array = {1, 2, 3};
    changeArray(array);
    System.out.println(array[0]); // 输出结果为 10
}

在上面的代码中,changeArray函数是一个引用传递的函数,它的参数array是一个int类型的数组。当我们调用changeArray函数时,传递给它的参数array的值为数组的地址。在函数内部,我们将数组的 个元素修改为10,由于使用的是引用传递方式,当函数执行完毕后,原有的参数array的 个元素的值也被修改为了10。

需要注意的是,虽然引用传递可以修改传递给函数的参数,但它并不能修改参数所指向的对象的地址。例如:

public static void changeArray(int[] array) {
    array = new int[]{4, 5, 6};
}

public static void main(String[] args) {
    int[] array = {1, 2, 3};
    changeArray(array);
    System.out.println(array[0]); // 输出结果为 1
}

在上面的代码中,changeArray函数内部我们创建了一个新的int数组,但由于参数是按照引用传递的方式进行传递的,所以当函数执行完毕后,原有的参数array并没有被修改所指向的对象的地址,因此打印出来的结果仍为1。

综上所述,Java中存在两种参数传递方式:值传递和引用传递。对于基本数据类型的参数,采用的是值传递方式,对于对象类型的参数,采用的是引用传递方式。在理解和使用时需要注意它们之间的区别和联系。