Java基本数据类型默认值仅对成员变量自动生效:int为0、double为0.0、char为'\u0000'、boolean为false、引用类型为null;局部变量必须显式初始化,否则编译失败;数组元素new后即按类型获默认值;包装类成员变量默认为null,非基本类型零值。

Java 中基本数据类型默认初始值只在成员变量(即类中直接定义、方法外的字段)上自动生效,代码中体现得很直接:不赋值也能安全访问,值就是规范规定的默认值。但局部变量完全不适用——没显式初始化就用,编译直接失败。
成员变量直接打印就能看到默认值
在类中声明基本类型字段,不写等号赋值,创建对象后直接使用,输出结果就是 Java 规定的默认值:
- int x; → 打印为 0
- double d; → 打印为 0.0
- char c; → 打印为空白(实际是 '\u0000',不可见控制字符)
- boolean b; → 打印为 false
- String s; → 打印为 null(引用类型,不是基本类型,默认值是 null)
示例代码片段:
// 类定义class Demo {
int num;
double price;
char grade;
boolean valid;
String name;
}
// 使用
Demo d = new Demo();
System.out.println(d.num); // 输出 0
System.out.println(d.price); // 输出 0.0
System.out.println("'" + d.grade + "'"); // 输出 ''(空引号,无字符)
System.out.println(d.valid); // 输出 false
System.out.println(d.name); // 输出 null
数组元素默认值与位置无关,new 后立即生效
只要执行了 new Type[n],不管数组是成员变量还是局部变量,所有元素都会按类型填入默认值:
立即学习“Java免费学习笔记(深入)”;
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- int[] a = new int[2]; → a[0] == 0, a[1] == 0
- boolean[] b = new boolean[1]; → b[0] == false
- char[] c = new char[1]; → c[0] == '\u0000'
- String[] s = new String[2]; → s[0] == null, s[1] == null
注意:int[] arr; 只是声明,arr 本身为 null;必须 new 之后才能访问元素。
局部变量不享受任何默认值,未初始化=编译错误
方法内声明的变量,哪怕类型和成员变量完全一样,也不给默认值。编译器会拦截所有“可能未赋值就使用”的情况:
- void test() { int x; System.out.println(x); } → 编译报错:“variable x might not have been initialized”
- int y; if (true) y = 5; → 仍报错,因为编译器不做运行时推理,只看控制流路径是否全覆盖
- 正确写法:int y = 5; 或 int y; if (cond) y = 10; else y = 20;
包装类默认为 null,不是基本类型的零值
这是极易出错的一点:Integer、Boolean 等是引用类型,它们的成员变量默认值是 null,不是 0 或 false:
- Integer count;(成员变量)→ 值为 null,不是 0
- int c = count; → 运行时报 NullPointerException(自动拆箱失败)
- 安全做法:if (count != null) { c = count; } 或用 Objects.requireNonNull(count)
同理,Boolean flag; 默认是 null,不是 false;误当 boolean 用会导致 NPE。

















