java中一维数组传参本质是传递引用副本,修改元素影响原数组,但重赋值不影响;常用写法为int[]形参,可变参数用int...,安全起见需手动克隆。

Java 中一维数组作为函数参数传递,本质上传递的是数组对象的引用副本,不是数组内容的拷贝。这意味着方法内对数组元素的修改会直接影响原始数组,但重新给形参赋值(如指向新数组)不会改变原数组变量的指向。
基本传参写法:直接使用数组类型
最常用、最清晰的方式是将参数声明为 int[]、String[] 等具体数组类型:
- 方法定义时写 void process(int[] arr),明确表达“接收一个整型数组”
- 调用时直接传数组名,如 process(numbers),无需额外操作
- 方法内部可遍历、读取或修改 arr[i],这些改动实时反映在原数组上
可变参数:适用于不确定长度的场景
当希望方法能接受零个或多个同类型值(逻辑上等价于数组),可用可变参数语法:
一款AI工具,主要用于管理 OpenClaw 所使用的来自 OpenRouter 的免费 AI 模型。自动按质量对模型进行排序,配置回退机制以应对速率限制,并更新 opencla...,适合需要提升相关任务效率的用户。
- 参数声明为 void printAll(int... values),编译器自动将其视为 int[]
- 调用方式更灵活:既可传单个值 printAll(1, 2, 3),也可传数组 printAll(arr)
- 注意:可变参数只能放在参数列表末尾,且一个方法中最多一个
安全传递:避免意外修改原数组
若方法逻辑本不该改动原始数据,但又需数组内容,应主动创建副本:
- 调用前用 arr.clone() 传入副本,如 analyze(arr.clone())
- 或在方法内部用 Arrays.copyOf(arr, arr.length) 构造新数组
- 这样即使方法内修改了数组元素,也不会波及调用方持有的原始数组
关键细节提醒
理解以下两点能避开常见误区:
- Java 没有真正意义上的“传引用”:它始终是“按值传递”,只是这个“值”是引用的副本。所以改元素可以,换整个数组对象不行
- 数组长度不可变:无论怎么传参,方法内都无法通过形参改变原数组的 length 属性;扩容缩容必须新建数组并手动复制
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










