在 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()方法中的原数组也跟着变了。