java基本类型默认值由jvm强制初始化:成员变量(实例/静态)自动初始化为0、0.0、'\u0000'、false或null(数组引用),局部变量必须显式赋值,包装类默认null,数组创建后元素按类型初始化。

Java 基本类型默认值不是“可选配置”,而是 JVM 强制执行的内存初始化规则。它直接影响变量是否可用、程序是否编译通过、运行时是否抛异常。掌握这些规则,能避开大量隐性 bug,比如未初始化访问、空指针、逻辑误判。
成员变量自动初始化,但仅限类字段
在类中直接声明的变量(即实例变量或静态变量),JVM 保证其拥有确定初始值:
- 数值型(byte/short/int/long/float/double)→ 对应 0 或 0.0f/0.0d
- char → '\u0000'(不是空格,也不是 null,是 Unicode 空字符)
- boolean → false
- 数组引用本身(如 int[] arr)→ null;但一旦 new 出来,元素按类型初始化(如 new int[3] → {0, 0, 0})
局部变量必须显式赋值,编译器严格把关
方法内、代码块内定义的变量不享受默认值保护。哪怕只有一条执行路径没赋值,编译就报错:
- 写 int x; 后直接 System.out.println(x); → 编译失败
- if 分支中只给 x 赋值一次,else 缺失 → 编译失败
- 正确做法:确保所有控制流路径都完成初始化,或统一在声明处赋初值(如 int x = 0;)
包装类默认为 null,拆箱前务必判空
Integer、Boolean、Character 等是引用类型,作为成员变量时默认值是 null,不是 0 或 false:
- Integer i; 在类里 → 实际是 null,不是 0
- int j = i;(自动拆箱)→ 抛 NullPointerException
- 安全写法:用 Objects.requireNonNull(i) 主动拦截,或先判 if (i != null)
- 推荐优先使用基本类型,除非需要 null 表达“未设置”语义
数组创建即初始化,但声明 ≠ 创建
数组行为分两层:引用变量和元素内容:
- int[] arr; → arr 是 null(引用未指向对象)
- int[] arr = new int[5]; → arr 指向堆中对象,5 个元素全为 0
- boolean[] flags = new boolean[2]; → 自动得 {false, false}
- 无论数组是成员变量还是局部变量,只要执行了 new,元素就按类型默认值填充
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











