Java一维数组初始化只有静态初始化(声明时直接赋值)和动态初始化(先声明再new)两种本质方式,其他写法均为其语法糖或组合变体。

Java中一维数组初始化只有两种本质方式:声明时直接赋值(静态初始化),或先声明再用 new 分配内存(动态初始化)。其他写法只是语法糖或组合变体,底层都归结为这两类。
声明+直接赋值:适用于已知全部元素值的场景
这种写法在编译期就确定数组长度和内容,JVM 会自动推导类型和大小,不能拆成两步(比如先声明变量再用 {...} 赋值会编译错误)。
-
int[] arr = {1, 2, 3};✅ 合法,等价于new int[]{1, 2, 3} -
int[] arr; arr = {1, 2, 3};❌ 编译失败:illegal start of expression -
int arr[] = {1, 2, 3};✅ 合法,但不推荐,[]紧贴类型更清晰
先声明后 new:必须指定长度,元素自动初始化为默认值
这是真正意义上的“动态创建”,长度可以是变量,适合运行时才确定大小的场景。注意原始类型元素会被填充默认值(如 int 是 0,boolean 是 false),引用类型是 null。
-
int[] arr = new int[5];→ 长度为 5,内容是{0, 0, 0, 0, 0} -
String[] names = new String[3];→{null, null, null} -
int len = 10; int[] data = new int[len];✅ 长度支持变量
常见错误:混用初始化语法导致编译失败
最容易踩的坑是把静态初始化语法误用在非声明语句中,或者对已声明数组重复用花括号赋值。
立即学习“Java免费学习笔记(深入)”;
-
int[] a; a = new int[]{1,2,3};✅ 正确:右侧是数组字面量表达式 -
int[] a; a = {1,2,3};❌ 错误:缺少new和类型,JVM 不知道要创建什么数组 -
int[] a = new int[3]; a = {1,2,3};❌ 同上,不是声明语句,不能省略new int[]
int[] valid1 = {1, 2, 3};
int[] valid2 = new int[]{1, 2, 3};
int[] valid3 = new int[3];
valid3[0] = 1; valid3[1] = 2; valid3[2] = 3;
// 下面这行单独出现就会报错:
// int[] invalid = {1, 2, 3}; // ✅ 只有在声明时才合法
真正容易被忽略的是:数组一旦用 new 创建,长度就不可变;而静态初始化的数组长度由花括号内元素个数决定,改元素个数就得重写整行代码。没有“扩容”操作,这点和 ArrayList 有本质区别。










