Java数组传参是引用的值传递:形参修改元素会影响原数组,但重赋值新数组不影响原引用。基本类型则是纯值传递,二者本质不同。

Java 中数组作为方法参数传递时,实际传递的是数组对象的引用副本,不是数组本身,也不是数组元素的拷贝。这意味着方法内部可以修改数组元素的值,且修改会反映到原数组;但若在方法内让形参指向新数组(如 arr = new int[5]),则不会影响调用方的原始数组引用。
数组传参本质是“引用的值传递”
Java 所有对象(包括数组)都存储在堆中,变量保存的是指向堆中对象的引用(即内存地址)。当数组作为参数传入方法时,传递的是该引用的一个副本——它和原引用指向同一个数组对象。因此:
- 通过形参修改
arr[i]的值,原数组对应位置同步变化 - 对形参重新赋值(如
arr = new int[]{9,8,7}),只是让副本指向新对象,原引用不变 - 这既不是纯“值传递”(因为能改内容),也不是纯“引用传递”(因为不能改变原引用指向)
可被修改:数组元素内容生效
以下代码能清晰体现这一点:
示例:void modifyArray(int[] a) {<br> a[0] = 100; // ✅ 修改生效<br> a[1] = 200;<br>}调用前:
int[] nums = {1, 2, 3};调用后:
nums 变为 {100, 200, 3}立即学习“Java免费学习笔记(深入)”;
不可改变:形参重指向不影响原引用
如果在方法中让形参指向新数组,原数组引用不受影响:
示例:void reassignArray(int[] a) {<br> a = new int[]{4, 5, 6}; // ❌ 不影响调用方的 nums<br>}调用后
nums 仍是 {100, 200, 3},未变成 {4,5,6}
对比基本类型与数组传参的区别
基本类型(如 int、boolean)传参是真正的值传递:形参是实参值的副本,修改互不影响。
数组虽是对象,但 Java 不支持真正的引用传递语法(如 C++ 的 &),其机制统一为“对象引用的值传递”。理解这点,就能避免误以为“改了引用就等于改了原变量”。


















