Java数组默认值由JVM在创建时按元素类型一次性填充:基本类型为零值(如int为0、boolean为false、char为'\u0000'),引用类型为null;声明未创建则变量为null,局部变量未初始化编译报错,成员变量默认null。

Java中数组的默认值由元素类型决定,不是由数组本身“设置”,而是JVM在内存分配时自动填充的。理解这一点,才能避免空指针、逻辑错误等常见问题。
基本类型数组的默认值是确定的
所有基本类型数组(如int[]、boolean[]、double[]等)在创建后会自动初始化为对应类型的零值:
- 数值型(byte/short/int/long/float/double)→ 默认为 0(或0.0)
- boolean → 默认为 false
- char → 默认为 '\u0000'(Unicode空字符,不是空格)
引用类型数组的默认值是null
String[]、Object[]、自定义类数组等,其每个元素默认为 null,而非实例对象:
- 例如:String[] arr = new String[3]; → arr[0]、arr[1]、arr[2] 全为 null
- 直接调用 arr[0].length() 会抛出 NullPointerException
- 需显式赋值或初始化,如 arr[0] = "hello"; 或配合循环+new操作
默认值只在数组创建时生效,不随后续操作变化
数组一旦创建,JVM就完成默认填充;之后任何修改(包括重新赋值、扩容、复制)都不会触发“再次默认初始化”:
立即学习“Java免费学习笔记(深入)”;
- int[] a = new int[2]; → a = [0, 0]
- a = new int[3]; → 原数组丢弃,新数组为 [0, 0, 0](重新分配+重填)
- Arrays.fill(a, -1); → 手动覆盖后变为 [-1, -1, -1],默认值不再起作用
局部变量数组 vs 成员变量数组:声明不等于创建
容易混淆的是“声明”和“创建”的区别:
- int[] arr;(仅声明)→ arr 是 null(局部变量未初始化会编译报错;成员变量默认为 null)
- int[] arr = new int[5];(声明+创建)→ 此时才触发默认值填充
- 局部数组变量必须显式初始化才能使用,否则编译失败;成员变量数组若未初始化,值为 null,访问元素前务必判空
基本上就这些。关键记住:默认值是JVM对已创建数组的“一次性填充”,类型决定值,引用类型填null,别指望它帮你new对象。










