java基本类型默认值仅对成员变量(含实例和静态变量)生效,局部变量必须显式初始化;byte/short/int/long为0,float/double为0.0f/0.0d,char为'\u0000',boolean为false;数组元素new后按类型自动填充默认值;包装类和引用类型默认为null。

Java 中基本类型的默认初始化值只对类的成员变量(包括实例变量和静态变量)生效,局部变量没有默认值,必须显式初始化。
以下是八大基本类型作为成员变量时的默认值:
-
byte、short、int、long→0(long是0L,数值上等价于 0) -
float、double→0.0f、0.0d(注意不是整数0,类型不可混用) -
char→'\u0000'(Unicode 空字符,不是空格' ',也不是null;打印时不显示任何内容) -
boolean→false
关键限制:这些默认值不会应用于方法内、循环中或 if 块里定义的局部变量。例如:
void test() {
int x;
System.out.println(x); // 编译错误:可能未初始化
}
这种写法直接报错,编译器强制要求局部变量在使用前必须赋值。
数组元素也按类型取默认值
只要执行了 `new`,无论数组是成员还是局部变量,所有元素都会被自动填充对应基本类型的默认值:-
int[] a = new int[3];→{0, 0, 0} -
boolean[] b = new boolean[1];→{false} -
char[] c = new char[2];→{'\u0000', '\u0000'} -
Integer[] d = new Integer[2];→{null, null}(包装类是引用类型,默认为null)
包装类和引用类型默认为 null
`Integer`、`Boolean`、`String` 等不是基本类型,它们的成员变量默认值是 `null`,不是 `0` 或 `false`。 若未判空就拆箱,比如 `int i = someInteger;`,而 `someInteger` 是 `null`,运行时会抛出 `NullPointerException`。怎么验证默认值
写一个简单类,在 `main` 方法中直接访问静态或实例成员变量即可:class Demo {
static int i;
static double d;
static char c;
static boolean b;
public static void main(String[] args) {
System.out.println(i); // 输出 0
System.out.println(d); // 输出 0.0
System.out.println("'" + c + "'"); // 输出 ''(空字符,引号间无内容)
System.out.println(b); // 输出 false
}
}
这个测试能清晰看到 JVM 在类加载或对象创建时自动完成的初始化行为。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











