Java数组长度固定,所谓“静态”指编译期确定长度(如字面量、final变量),“动态”指运行时确定长度(如变量、方法返回值),但二者本质均为固定长度数组;需可变长应使用ArrayList等集合类。

Java 中没有“静态数组”和“动态数组”的官方概念,但开发者常借这两个词来区分编译期确定长度(即常规数组)和运行时才确定长度(本质仍是普通数组,只是长度由变量决定)的情况。Java 的一维数组本身是固定长度的,所谓“动态”,其实是用变量控制创建时的长度,并非像 ArrayList 那样可变长。
声明并创建编译期长度已知的一维数组
这是最常见写法:类型、方括号、变量名,然后用 new 类型[长度] 创建,长度必须是编译期常量(如字面量、final 变量)。
- int[] arr1 = new int[5]; —— 创建含 5 个默认值为 0 的 int 元素的数组
- String[] names = new String[3]; —— 创建含 3 个 null 引用的 String 数组
- final int LEN = 10; double[] data = new double[LEN]; —— final 变量也可用于编译期确定长度
声明并创建运行时长度的一维数组
只要长度表达式在运行时求值(比如来自用户输入、方法返回值、普通变量),就属于“动态创建”。语法完全一样,只是方括号里的值不是编译时常量。
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- int n = scanner.nextInt(); int[] arr = new int[n]; —— n 是运行时读入的,数组长度随之确定
- int len = calculateSize(); char[] buffer = new char[len]; —— 方法返回值决定长度
- String[] args = new String[argc]; —— argc 是某个整型变量,非 final,也属此类
声明 + 初始化一步到位(数组字面量)
适用于元素内容已知且数量固定的场景,JVM 自动推断类型和长度,无需显式写 new 和类型。
立即学习“Java免费学习笔记(深入)”;
- int[] nums = {1, 2, 3, 4, 5}; —— 等价于 new int[]{1,2,3,4,5}
- String[] fruits = {"apple", "banana", "cherry"};
- boolean[] flags = {true, false, true};
注意:Java 数组长度不可变
无论用哪种方式创建,一旦数组对象被创建,其 length 属性就固定了。后续不能“扩容”或“缩容”。需要可变长度容器,请改用 ArrayList<E> 等集合类。
- int[] a = new int[3]; System.out.println(a.length); // 输出 3
- a = new int[10]; // 这是重新赋值引用,原数组被丢弃,不是扩容
- // ❌ 错误:a.length = 5; // 编译不通过,length 是只读字段

















