length是java数组的public final字段而非方法,直接访问获元素个数;因数组大小固定且需o(1)无开销访问,与list.size()等方法有本质区别。

length 是 Java 数组的公共 字段,不是方法,不能加括号调用。直接访问即可得到元素个数。
为什么 length 不是方法而是字段
Java 中数组是对象,但设计上把大小固化为 length 字段(final int),避免每次调用都重复计算或查表。这和 List.size() 的方法调用有本质区别——前者是 O(1) 且无开销,后者是接口契约,具体实现可能不同。
常见错误:arr.length() 会编译报错 cannot resolve method 'length()'。
-
length只存在于数组类型,String、集合类(如ArrayList)没有该字段 - 多维数组中,
arr.length返回第一维长度,arr[0].length才是第二维长度(需确保arr[0]非null) - 数组创建后
length不可变,试图修改(如arr.length = 5)会导致编译错误
和 String.length() 容易混淆的点
String 是类,length() 是实例方法;数组是特殊对象,length 是字段。两者名字相同但语义和语法完全不同。
示例对比:
int[] arr = {1, 2, 3};<br>System.out.println(arr.length); // ✅ 输出 3<br><br>String s = "abc";<br>System.out.println(s.length()); // ✅ 输出 3<br>System.out.println(s.length); // ❌ 编译错误:cannot find symbol
- 别因为
String.length()习惯性给数组加括号 - IDE 自动补全有时会误导(比如输入
arr.leng后提示length,但不会提示括号) - 泛型集合如
ArrayList必须用size(),和数组无关
空数组和 null 数组的处理
空数组(new int[0])的 length 是 0;null 数组没有 length 字段,直接访问会抛 NullPointerException。
- 安全写法:先判空再取
length,例如if (arr != null) { count = arr.length; } - 工具类如
Objects.requireNonNull(arr).length适合明确要求非空的场景 - 流式操作中(如
Arrays.stream(arr)),传入null会立即抛异常,不经过length访问
真正容易被忽略的是多维数组里某一行可能为 null,比如 String[][] grid = new String[3][];,此时 grid[1] 是 null,访问 grid[1].length 就会崩——得逐层判空。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











