Java中8种基本类型成员变量未初始化时默认值为:byte/short/int/long为0,float/double为0.0f/0.0,char为'\u0000',boolean为false。

Java中8种基本类型在类成员变量(即实例变量或静态变量)未显式初始化时,会自动赋予系统默认值。编写测试用例验证这些默认值,关键在于:声明成员变量、创建对象(或访问静态变量)、断言其值等于预期默认值。
明确8种基本类型的默认值
先确认各类型的默认值,这是断言的依据:
- byte、short、int、long → 0
- float、double → 0.0f / 0.0
- char → false
定义待测类,仅声明成员变量不初始化
新建一个普通Java类,只声明8种基本类型的实例变量(或静态变量),不赋值:
public class DefaultValueTestTarget {
byte b;
short s;
int i;
long l;
float f;
double d;
char c;
boolean bool;
}
注意:局部变量没有默认值,必须显式初始化;只有类成员变量才适用此规则。
立即学习“Java免费学习笔记(深入)”;
用JUnit编写断言测试
使用JUnit 5(推荐)或JUnit 4,创建测试方法,实例化目标类并逐一验证:
@Test
void testPrimitiveFieldDefaultValues() {
DefaultValueTestTarget target = new DefaultValueTestTarget();
assertEquals((byte) 0, target.b);
assertEquals((short) 0, target.s);
assertEquals(0, target.i);
assertEquals(0L, target.l);
assertEquals(0.0f, target.f, 0.0f); // float需指定delta
assertEquals(0.0, target.d, 0.0); // double同理
assertEquals('\u0000', target.c);
assertFalse(target.bool);
}
说明:
- float/double比较必须带误差容限(delta),避免浮点精度问题
- char用
'\u0000'或'\0'均可,语义清晰 - boolean直接用
assertFalse比assertEquals(false, ...)更直观
补充:验证静态变量默认值
若变量是static,无需实例化,直接通过类名访问:
public class StaticDefaultValueTestTarget {
static byte b;
static boolean bool;
// 其他7种同理...
}
@Test
void testStaticPrimitiveDefaults() {
assertEquals((byte) 0, StaticDefaultValueTestTarget.b);
assertFalse(StaticDefaultValueTestTarget.bool);
}
注意:静态变量属于类本身,在类首次主动使用时初始化,默认值规则与实例变量一致。


















