Java中成员变量有默认初始化值,局部变量必须显式初始化;基本类型成员变量默认为0、0.0、'u0000'或false,引用类型成员变量默认为null,静态和实例变量均适用,final成员变量除外,局部变量未初始化则编译报错。

Java 中成员变量(即类的字段)在未显式赋值时,会自动获得默认初始化值,这个过程由 JVM 在对象实例化时完成。局部变量则没有默认值,必须显式初始化后才能使用。
基本数据类型的默认值
所有基本类型成员变量都有确定的默认值,与是否是包装类无关:
- byte、short、int、long:默认为 0
- float、double:默认为 0.0
- char:默认为 '\u0000'(空字符,不是空格)
- boolean:默认为 false
引用类型成员变量的默认值
所有引用类型(包括自定义类、数组、接口、String 等)的成员变量,默认值都是 null:
- String name; → null
- List<String> list; → null
- int[] arr; → null(注意:不是长度为 0 的数组)
静态变量和实例变量都适用该规则
无论用 static 修饰与否,只要属于类的字段,就遵循默认初始化规则:
立即学习“Java免费学习笔记(深入)”;
- 静态变量在类加载时被初始化为默认值
- 实例变量在每次 new 对象时被初始化为默认值
- final 成员变量除外:必须在声明时、构造器中或实例初始化块里明确赋值,否则编译报错
不适用于局部变量
方法内部定义的变量(包括形参、方法体内声明的变量)不会被自动初始化:
- int x; 在方法内 → 编译错误:“variable x might not have been initialized”
- 即使类型是引用类型,如 String s;,也必须赋值才能使用
- 这一限制有助于避免因未初始化导致的运行时异常










