java一维数组长度是对象固有属性,通过同一引用共享,方法内直接用arr.length;需校验null和空数组,并以arr.length动态控制遍历边界。

Java 一维数组的长度在方法调用中不会“被传递”——它始终是数组对象固有的属性,调用方和被调方通过 同一个数组引用 共享该长度。关键不是“传长度”,而是如何在方法内安全、正确地使用这个长度值。
数组长度是属性,不是参数
数组的 length 是一个公开的 final 属性(不是方法),只要拿到数组引用,就能直接访问:arr.length。方法声明时无需额外定义 int 类型参数来接收长度:
- ✅ 正确写法:
void process(int[] data),内部直接用data.length - ❌ 冗余且易错:
void process(int[] data, int len)—— 若传入的len与data.length不一致,逻辑将不可靠
方法内必须校验 length 的实际用途
虽然 length 总是可读的,但空数组(new int[0])或 null 会引发问题。因此,方法开头应做基础防御:
- 检查是否为
null:若未处理,后续访问arr.length会抛NullPointerException - 根据业务判断是否允许空数组:例如求最大值的方法,空数组无意义,应提前返回或抛异常
- 示例:
if (arr.length == 0) return -1; // 或 throw new IllegalStateException("数组不能为空")
遍历时下标边界必须基于 length 动态计算
数组长度固定,但具体值在运行时才确定。所有循环都应以 arr.length 为准,而非硬编码数字:
- ✅ 安全遍历:
for (int i = 0; i - ❌ 危险写法:
for (int i = 0; i —— 若数组实际长度小于 5,会越界;大于 5,则遗漏元素 - 注意:最大合法下标永远是
arr.length - 1,访问arr[arr.length]必然触发ArrayIndexOutOfBoundsException
当需要“长度语义”而非原始数组时,考虑封装或重构
如果方法逻辑本质只依赖长度(比如生成指定长度的随机数组),那直接传 int size 比传空数组更清晰;如果既需长度又需内容,传数组仍是最佳选择:
- 传长度优先场景:
int[] createZeros(int n)—— 明确意图,避免构造无意义的空数组再传入 - 传数组优先场景:
int sum(int[] nums)—— 长度和数据天然绑定,无需拆解 - 避免“假传参”:不要为了凑参数而把
arr.length单独提取出来作为第二个参数,这破坏了数据一致性
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











