Java中数组的length是public final字段,非方法,直接用arr.length获取;它返回第一维长度,多维需链式调用;使用前须判空,且是防止越界的核心防线。

Java 中获取数组长度很简单,但真正用好它,关键在于理解 length 是固定值,不能改,也不能“动态变长”——所谓“动态调整处理逻辑”,其实是根据 length 做判断、做分支、做复制,而不是改变数组本身。
直接用 arr.length 获取长度,别加括号
数组的 length 是一个 public final 字段,不是方法。写成 arr.length() 会编译失败。
- 无论是一维还是多维,
arr.length都返回第一维元素个数:如int[][] mat = new int[4][6],mat.length是 4,mat[0].length才是 6 - 基本类型数组(
int[]、double[])和引用类型数组(String[]、Object[])都支持.length - 使用前务必判空:
if (arr != null) { int len = arr.length; ... },否则空指针异常
用 length 控制遍历和边界,避免越界
length 是防止 ArrayIndexOutOfBoundsException 的第一道防线,也是写安全循环的基础。
- 标准 for 循环条件必须是
i ,不是 <code>i 或硬编码数字 - 增强 for 循环(for-each)自动避开下标,但内部仍依赖 length 判断迭代次数
- 处理子数组或切片时,用 length 做校验:比如取前 3 个元素,先
if (arr.length >= 3)再操作
靠 length 触发扩容/缩容逻辑,手动模拟“动态”
数组长度不可变,但你可以用 length 和当前容量做比较,决定是否新建数组并复制。
立即学习“Java免费学习笔记(深入)”;
- 扩容场景:比如添加元素前检查
size == arr.length,满足则arr = Arrays.copyOf(arr, arr.length * 2) - 缩容场景:删除后若
size ,可缩到 <code>size或size * 2,用Arrays.copyOf(arr, newSize) - 注意:复制时
System.arraycopy()更高效,尤其大数据量;Arrays.copyOf()更简洁,底层也调它
与 ArrayList 对比,明确何时该换结构
如果你频繁增删、反复依赖 length 做扩容判断,说明你其实需要的是 ArrayList,而不是自己模拟。
-
ArrayList.size()返回当前元素个数,ArrayList.capacity不对外暴露——你只管 add/remove,扩容缩容由它自动完成 - 数组适合:长度确定、只读为主、高性能连续访问(如数学计算、IO 缓冲区)
- ArrayList 适合:元素数量变化频繁、需插入/删除中间位置、配合集合工具类(如 stream、sort)


















