Java数组只有length字段,无length()方法;多维数组的length仅表示第一维大小;合法索引范围为0到arr.length-1。

Java数组没有length()方法,只有length字段
Java数组是对象,但不是List或String那种有方法的类——它没有length()方法,只有公开的length字段。写成arr.length()会直接编译报错:cannot resolve method 'length()' 。
常见错误场景:刚从JavaScript或Python转来,下意识调用括号;或者误把String的length()记混到数组上。
-
int[] arr = {1, 2, 3}; int len = arr.length;✅ 正确,无括号 -
arr.length();❌ 编译失败 -
arr.size();❌ 数组没有size(),那是Collection的
多维数组的length只反映第一维大小
比如int[][] matrix = new int[3][5];,matrix.length是3,不是15,也不是5。它只表示“有多少行”,不涉及列数或总元素数。
容易踩的坑:遍历二维数组时用i 控制外层循环没问题,但内层若写成<code>j 就错了——应该用<code>arr[i].length(每行可能长度不同)。
立即学习“Java免费学习笔记(深入)”;
- 不安全写法:
for (int j = 0; j → 把列当行遍历 - 安全写法:
for (int j = 0; j - 获取总元素数?得手动累加:
int total = Arrays.stream(matrix).mapToInt(row -> row.length).sum();
ArrayIndexOutOfBoundsException常因length和索引混淆引发
数组合法索引范围是0到arr.length - 1(闭区间)。写arr[arr.length]或arr[-1]都会触发ArrayIndexOutOfBoundsException,这是运行时异常,编译器不检查。
典型出错点:循环条件写成i ,或用<code>arr.length当索引直接访问(比如想取“最后一个元素”却写成arr[arr.length])。
- 错误循环:
for (int i = 0; i - 正确写法:
for (int i = 0; i - 取末尾元素:
arr[arr.length - 1](前提是arr.length > 0) - 空数组访问
arr[0]也会崩,别忘了判空
泛型集合不能用length,必须用size()
一旦把数组转成List(比如Arrays.asList(arr)),就再也别碰length了——List没有这个字段,只有size()方法。反过来,ArrayList也不能用length。
混淆根源:IDE自动补全可能同时列出length和size(),但类型不对时选错就报错。
-
int[] a = {1,2}; int l1 = a.length;✅ -
List<integer> list = Arrays.asList(a); int l2 = list.size();</integer>✅ -
list.length;❌ 编译报错:cannot find symbol: variable length -
a.size();❌ 编译报错:cannot resolve method 'size()'
数组的length是字段而非方法,这点在反射、序列化或字节码层面都体现得很实在;但更常被忽略的是:它不可修改、不参与继承、也不受泛型擦除影响——这些细节在写工具类或处理动态数组时才会突然冒出来。









