Java数组长度只能通过arr.length字段获取,它是编译期确定、运行时只读的public final字段,写成arr.length()会编译失败;多维数组需逐层取length且须判空防NPE;null数组访问length抛NullPointerException,安全写法需先判空再取长。

Java 数组长度只能通过 arr.length 字段获取,不是方法调用,不加括号;它在编译期就确定、运行时只读,是遍历和边界控制最直接可靠的依据。
数组 length 是字段,不是方法
这是最容易出错的第一步。数组的 length 是 JVM 内置的 public final 字段,访问时必须写成 arr.length,写成 arr.length() 会直接编译失败,提示 “Cannot resolve method 'length()'”。这和字符串的 str.length()、集合的 list.size() 完全不同,三者命名相似但语义和语法严格区分。
- ✅ 正确:int len = numbers.length;
- ❌ 错误:int len = numbers.length(); 或 int len = numbers.size();
- 字符串和集合没有“通用接口”,不能靠记忆统一写法,必须按类型区分
多维数组各维长度的取法与安全遍历
二维数组本质是一维数组的数组,matrix.length 表示行数(外层数组长度),matrix[i].length 才表示第 i 行的列数。三维及以上依此类推:arr[0][0].length 是第三维长度。但必须注意——每层都可能为 null,尤其在不规则数组中。
- int[][] m = {{1,2}, {3,4,5}}; → m.length == 2,m[0].length == 2,m[1].length == 3
- 遍历二维数组时,外层条件用 i < matrix.length,内层必须用 j < matrix[i].length
- 不能假设 matrix.length == matrix[0].length,否则在不规则数组中会越界或 NPE
- 安全做法:先判空再取长,如 if (matrix != null && i < matrix.length && matrix[i] != null)
空数组与 null 数组的边界检查
数组没有 isEmpty() 方法,也无法自动判空。对 null 数组访问 length 会立即抛出 NullPointerException。常见于方法参数、JSON 解析结果、数据库映射等场景。
立即学习“Java免费学习笔记(深入)”;
- 危险写法:if (arr.length > 0) { ... } —— arr 为 null 时崩溃
- 安全写法:if (arr != null && arr.length > 0) { ... }
- 即使数组已创建但所有元素为 null(如 String[] names = new String[3]),names.length 仍是 3,不代表有效内容数量
length 在循环控制中的典型用法
length 是避免 ArrayIndexOutOfBoundsException 的核心依据,也是 for 循环和增强 for 的基础支撑。它不参与计算,只反映结构容量。
- 传统 for 循环:for (int i = 0; i < arr.length; i++) { ... }
- 增强 for 循环虽不显式用 length,但底层依赖它判断终止条件
- 初始化新数组时常用:int[] copy = new int[arr.length];
- 扩容需新建数组:int[] bigger = Arrays.copyOf(arr, arr.length * 2);


















