Java基本类型默认值:成员变量自动初始化为0、0.0、'\u0000'、false;局部变量必须显式初始化,否则编译报错;数组元素无论声明位置均按类型取默认值;包装类成员变量默认为null,拆箱前须判空。

Java 中基本数据类型的默认值和初始化规则,直接影响变量行为和程序稳定性。理解这些规则,能避免空指针、未定义行为等常见问题。
成员变量(类字段)自动初始化为默认值
在类中声明但未显式赋值的成员变量,JVM 会在对象创建时自动赋予默认值。这是 Java 的强制规范,与是否使用 new 创建实例无关。
- byte、short、int、long → 0
- float、double → 0.0f / 0.0d
- char → '\u0000'(即 Unicode 空字符,不是空格或 null)
- boolean → false
局部变量必须显式初始化才能使用
方法内部定义的变量(包括 for 循环、if 块中的变量),JVM 不提供默认值。编译器会严格检查:只要存在任何可能未赋值就访问的路径,就会报错 “variable might not have been initialized”。
- 即使写了 int x;,后续未赋值就写 System.out.println(x); → 编译失败
- 条件分支中需确保每条路径都初始化,例如:
if (flag) { x = 10; } else { x = 20; } // ✅ 安全
if (flag) { x = 10; } // ❌ 编译错误,x 可能未初始化
数组元素按类型取默认值,与声明位置无关
无论数组是成员变量还是局部变量,只要完成创建(即执行了 new Type[size]),其所有元素都会被自动初始化为对应类型的默认值。
立即学习“Java免费学习笔记(深入)”;
- int[] arr = new int[3]; → 元素为 {0, 0, 0}
- boolean[] flags = new boolean[2]; → {false, false}
- char[] cs = new char[1]; → {'\u0000'}
- 注意:int[] arr;(仅声明)不触发初始化;只有 new 执行后才生效
包装类变量默认为 null,不等于基本类型的默认值
Integer、Boolean 等引用类型包装类,作为成员变量时默认值是 null,而非 0 或 false。这点极易混淆,尤其在自动拆箱时引发 NullPointerException。
- Integer i;(成员变量)→ 默认为 null,不是 0
- Integer j = null; → int k = j; 会抛出 NPE(拆箱失败)
- 推荐用 Objects.requireNonNull() 或判空处理,避免隐式拆箱风险










