Java 参数传递

42 阅读1分钟

在 Java 编程中,参数传递是一个基础且重要的概念。当我们把变量作为参数传递给方法时,基本数据类型和数组(引用数据类型)的表现截然不同。 代码如下

public class Demo03 {
    public static void main(String[] args) {
        // 案例1:基本数据类型作为参数(注释部分,可自行测试)
        /*int x = 1;
        int y = 2;
        fun1(x, y);
        System.out.println("main()方法中 x = " + x + "; y = " + y); // 输出:x=1; y=2*/

        // 案例2:数组作为参数
        int[] arr = {1, 2, 3};

        System.out.println("调用fun2()之前:");
        showArr(arr);   // 输出:1 2 3
        fun2(arr);
        System.out.println("\n调用fun2()之后:");
        showArr(arr); // 输出:999 2 3
    }

    // 数组作为参数的方法
    public static void fun2(int[] arr) {
        arr[0] = 999;
        System.out.println("\nfun2()里面:");
        showArr(arr); // 输出:999 2 3
    }

    // 基本数据类型作为参数的方法(注释部分)
    public static void fun1(int x, int y) {
        x = 100;
        y = 200;
        System.out.println("fun1()方法中 x = " + x + "; y = " + y); // 输出:x=100; y=200
    }

    // 打印数组的工具方法
    public static void showArr(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
    }
}

运行结果

调用fun2()之前:
1 2 3 

fun2()里面:
999 2 3 

调用fun2()之后:
999 2 3 

二、核心差异:值传递 vs 引用传递的本质

从案例中可以看到:

  • 当传递基本数据类型(如 int x, y)  时,fun1()方法内部修改了参数值,但main()方法中的原变量值并未改变。
  • 当传递数组(引用数据类型)  时,fun2()方法内部修改了数组元素,main()方法中的原数组也跟着变了。