java基本类型初值取决于变量位置:成员变量自动初始化为0、0.0、'\u0000'、false;局部变量必须显式赋值;数组元素new后自动填默认值;包装类成员变量默认为null。

Java 中基本数据类型赋初值,关键看变量声明的位置和方式:成员变量自动获得默认值,局部变量必须手动赋值,数组元素在 new 后自动填充对应默认值。
成员变量直接用默认值
类中定义的字段(实例或静态变量),JVM 在对象创建或类加载时自动初始化,无需代码干预:
- 整数类型(byte/short/int/long)→ 默认为 0
- 浮点类型(float/double)→ 默认为 0.0f 或 0.0d
- char → 默认为 '\u0000'(Unicode 空字符,不是空格)
- boolean → 默认为 false
局部变量必须显式赋值
方法内、循环中、if 块里定义的变量,编译器不给任何默认值,未赋值就使用会直接报错:
-
错误写法:
int x; System.out.println(x);→ 编译失败 -
正确写法:
int x = 0;或int x; x = 5; - 分支逻辑中每条路径都得覆盖赋值,例如:
if (flag) { x = 10; } else { x = 20; }
数组元素按类型填默认值
只要执行了 new,无论数组是成员还是局部变量,所有元素都会被设为对应类型的默认值:
-
int[] a = new int[3];→ 元素为 {0, 0, 0} -
boolean[] b = new boolean[1];→ 元素为 {false} -
char[] c = new char[2];→ 元素为 {'\u0000', '\u0000'} - 注意:
int[] arr;仅声明不触发初始化;new才生效
包装类和引用类型默认为 null
Integer、Boolean、String 等不是基本类型,它们的成员变量默认值是 null,不是 0 或 false:
-
Integer i;(成员变量)→ 默认为 null,不是 0 - 若后续写
int j = i;(自动拆箱),会抛 NullPointerException - 安全做法:使用前判空,或改用基本类型 + 显式初始化










