Java数组的length是public final字段而非方法,不可加括号调用;多维数组中仅返回第一维长度;使用前必须判空防NPE;它表示容量而非业务逻辑大小,需与动态size区分。

Java 数组的 length 属性本身很简单,但用法稍有不慎,就会埋下维护隐患。它不是方法、不能改、不防空、不表业务逻辑——这些特性在日常开发中常被忽略,却直接影响代码健壮性和协作效率。
别把 length 当方法调用
这是最常见也最容易编译报错的问题:arr.length() 是非法写法。length 是 JVM 为数组对象内置的 public final 字段,不是方法,加括号会直接编译失败。
- ✅ 正确写法:
int len = arr.length; - ❌ 错误写法:
int len = arr.length();或int len = arr.size(); - 注意区分:字符串用
str.length(),集合用list.size(),三者语义和实现完全不同
多维数组 length 只管“行数”,别想当然
对于 int[][] matrix,matrix.length 永远只返回第一维长度(即“有多少个一维数组”),不是总元素数,也不是每行列数。
- 若声明为
new int[3][4],matrix.length == 3,matrix[0].length == 4 - 若为不规则数组(如
{{1,2}, {3,4,5}}),matrix[0].length和matrix[1].length可能不同 - 遍历时外层用
i < matrix.length,内层必须用j < matrix[i].length,且需确保matrix[i] != null
访问前必须判空,否则 NPE 随时发生
数组没有 isEmpty() 封装,arr.length 一旦在 arr == null 时被读取,立刻抛 NullPointerException。尤其在参数传入、JSON 解析或缓存读取场景中,null 极其常见。
立即学习“Java免费学习笔记(深入)”;
- ✅ 安全写法:
if (arr != null && arr.length > 0) { ... } - ❌ 危险写法:
if (arr.length > 0) { ... }(未判空,运行即崩) - 工具类中建议统一封装:
ArrayUtils.isNotEmpty(arr)或自定义静态校验方法
length 不等于业务大小,别混用容量与逻辑长度
int[] scores = new int[10] 的 length 是 10,但有效成绩可能只有前 3 个。把它当作“当前有效数量”用,会引发数据错漏或越界。
- 明确区分:数组容量(固定)、逻辑大小(动态变化,需单独变量如
size管理) - 遍历优先用增强 for:
for (int s : scores),避免依赖length做边界假设 - 对外暴露数组时,返回副本:
return Arrays.copyOf(scores, scores.length),防止外部篡改 - 业务增删频繁时,直接用
ArrayList<Integer>替代原始数组,更安全也更易维护
不复杂但容易忽略——真正影响长期维护的,往往就是这些看似基础的细节。


















