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

Java函数参数的传递方式及区别详解

发布时间:2023-06-08 10:49:29

Java函数参数的传递方式分为值传递和引用传递两种形式,它们之间的区别在于传递的是值还是地址。

1、值传递

值传递指的是将一个变量的值复制一份传递给函数的形参。在函数内部,对形参的任何操作都不会影响到实参的值。这是因为实参和形参在内存中的地址是不同的,它们之间没有联系。

例如:

public static void main(String[] args) {
    int a = 1;
    int b = 2;

    swap(a, b);

    System.out.println("a = " + a); // 输出 1
    System.out.println("b = " + b); // 输出 2
}

public static void swap(int a, int b) {
    int temp = a;
    a = b;
    b = temp;
}

在主函数中定义了两个变量a和b,分别赋值为1和2。调用swap函数,并将a和b的值传递给它。在函数内部,定义了一个temp变量,将a的值赋给它,再将b的值赋给a,最后将temp的值赋给b。然而,在改变a和b的值之后,并没有对主函数中的a和b的值造成影响,仍然分别为1和2。

2、引用传递

引用传递指的是将一个变量的地址传递给函数的形参。在函数内部,形参和实参指向同一块内存地址。因此,在对形参的操作中,实参的值也会被改变。

例如:

public static void main(String[] args) {
    int[] arr = {1, 2};
    swap(arr);

    System.out.println("arr[0] = " + arr[0]); // 输出 2
    System.out.println("arr[1] = " + arr[1]); // 输出 1
}

public static void swap(int[] arr) {
    int temp = arr[0];
    arr[0] = arr[1];
    arr[1] = temp;
}

在主函数中定义了一个数组arr,并赋值为{1, 2}。调用swap函数,并将数组arr的地址传递给它。在函数内部,定义了一个temp变量,将数组arr第一个元素的值赋给它,再将数组arr第二个元素的值赋给第一个元素,最后将temp的值赋给第二个元素。由于数组arr和形参指向同一个地址,所以对形参数组的操作会影响到实参数组。

总结:

值传递和引用传递的区别主要在于传递的是值还是地址。值传递适用于小数据类型,如int、char等。引用传递适用于大数据类型,如数组、对象等,可以避免重复复制大量数据,提高程序的效率。程序员需要根据具体情况选择不同的传递方式,以保证程序的正确性和效率。