Java基本类型数组用new创建后,所有元素自动初始化为对应零值:整数为0、浮点为0.0、char为'u0000'、boolean为false;多维数组仅最内层基本类型元素被初始化,外层未指定维度则为null。

Java 中基本类型数组一旦用 new 创建,所有元素会自动初始化为对应类型的零值,无需手动赋值。这不是代码写的“初始化语句”,而是 JVM 在分配堆内存时直接清零的结果。
基本类型数组默认值对照表
每种基本类型都有明确的默认值,且与是否显式声明无关,只取决于数组是否已被实例化(即执行了 new):
-
整数类型(
byte、short、int、long)→ 0 -
浮点类型(
float、double)→ 0.0f / 0.0 -
字符类型(
char)→ '\u0000'(Unicode 空字符,不是空格或' ') -
布尔类型(
boolean)→ false
常见误用与注意事项
这些默认值看似简单,但容易引发逻辑错误或运行时异常:
-
int[] arr = new int[3];后,arr[0] == null是语法错误——int是基本类型,不能与null比较 - 业务上“0”可能有歧义(比如温度、计费金额),此时应避免依赖默认值,改用包装类(如
Integer[])或额外标志位 - 局部变量数组必须显式
new,否则编译报错:“variable might not have been initialized”;而成员变量数组若未new,其引用本身为null,不代表元素有值
多维数组也遵循相同规则
只要最内层元素是基本类型,每一维都会被完整填充默认值:
立即学习“Java免费学习笔记(深入)”;
-
int[][] grid = new int[2][3];→ 共 6 个元素,全部为 0 -
boolean[][] flags = new boolean[1][100];→ 所有 100 个元素都是 false -
double[][] data = new double[4][];→ 外层数组有 4 个元素,但每个都是null(因为没指定第二维长度),此时访问data[0][0]会抛NullPointerException
如何覆盖或批量设置默认值
如果需要非默认值,有几种常用方式:
-
静态初始化:
int[] a = {1, 2, 3};—— 编译期确定内容和长度 -
Arrays.fill():
Arrays.fill(arr, 99);—— 快速填入统一值,支持基本类型和引用类型 -
循环赋值:适合按条件设置,例如
arr[i] = i % 2 == 0; -
Stream 初始化(Java 8+):
int[] arr = IntStream.generate(() -> 1).limit(5).toArray();


















