Java基本数据类型默认值仅适用于类成员变量:byte/short/int/long为0,float/double为0.0f/0.0d,char为'\u0000',boolean为false;局部变量必须显式初始化,否则编译报错。

Java 中基本数据类型的默认值只在类成员变量(即字段)中自动赋予;局部变量不会被初始化,必须显式赋值才能使用。验证方式主要是通过打印类中未初始化的字段值来观察。
基本数据类型默认值一览
以下是 Java 八种基本类型的默认值(仅适用于类的成员变量):
- byte、short、int、long → 0
- float、double → 0.0(float 是 0.0f,double 是 0.0d)
- char → '\u0000'(Unicode 空字符,输出时可能显示为空白或不可见)
- boolean → false
如何验证默认值
写一个简单类,在其中声明未初始化的基本类型字段,然后在 main 方法中创建实例并打印这些字段:
// 示例代码
立即学习“Java免费学习笔记(深入)”;
class DefaultValueTest {
int i;
double d;
char c;
boolean b;
public static void main(String[] args) {
DefaultValueTest t = new DefaultValueTest();
System.out.println("i = " + t.i); // 输出:0
System.out.println("d = " + t.d); // 输出:0.0
System.out.println("c = '" + t.c + "'"); // 输出:''(空引号间无字符)
System.out.println("b = " + t.b); // 输出:false
}
}
注意:局部变量不适用默认值
在方法内部定义的基本类型变量没有默认值,编译器会强制要求初始化:
- 例如:
void method() { int x; System.out.println(x); }→ 编译报错“可能尚未初始化” - 这是 Java 的安全机制,防止读取栈上随机内存值
为什么 char 默认是 '\u0000' 而不是空格或 null?
因为 char 是无符号 16 位整数类型,其数值范围是 0 到 65535,\u0000 就是数值 0 对应的 Unicode 字符。它不是“空”,而是合法的最小字符值;null 是引用类型的特殊值,不能赋给 char。


















