Java 8种基本数据类型的内存占用、默认值与取值范围由JVM规范强制定义:byte/short/char/int/float/long/double字节数固定,boolean无明确规定;默认值仅适用于成员变量;取值范围应通过包装类常量(如Integer.MAX_VALUE)获取,而非手动计算。

Java 中 8 种基本数据类型的物理内存占用、默认值与取值范围,不是靠死记硬背,而是由 JVM 规范强制定义的确定性事实。掌握它们的关键,在于分清“逻辑语义”和“物理实现”,并善用标准 API 验证。
内存占用:字节数固定,boolean 是例外
除 boolean 外,其余 7 种类型的字节数在所有 JVM 实现中完全一致,不随平台或 JDK 版本变化:
- byte:1 字节(8 位)
- short、char:各 2 字节(16 位;注意 char 是无符号,范围 0~65535)
- int、float:各 4 字节(32 位)
- long、double:各 8 字节(64 位)
- boolean:JVM 规范未规定大小;HotSpot 中字段常按 1 字节对齐,但绝不可当作 1 bit 使用——JVM 不支持 bit 级寻址,也不保证数组中每个元素只占 1 bit(实际底层多以 byte 为单位存储)
验证方式:直接调用包装类的 BYTES 常量,如 Integer.BYTES、Character.BYTES,准确且可读性强。
取值范围:用常量代替心算,补码与 IEEE 754 是底层依据
整数类型(byte/short/int/long)统一采用有符号补码表示,范围公式为 -2^(n-1) 到 2^(n-1)-1(n 为位数)。浮点类型(float/double)遵循 IEEE 754 标准,“范围”不等于“精度”。
立即学习“Java免费学习笔记(深入)”;
- 不要手动计算
2^31-1,直接用Integer.MAX_VALUE、Long.MIN_VALUE等静态字段 -
Float.MIN_VALUE是最小正数(非负数下界),真正下界需用Float.NEGATIVE_INFINITY或Float.MIN_NORMAL -
Character.MAX_VALUE是'\uffff'(即 65535),不是Short.MAX_VALUE(32767)——二者语义不同,不可混用
默认值:仅对成员变量生效,局部变量必须显式初始化
默认值是 JVM 在对象初始化阶段自动赋予的语义保障,但仅适用于类的字段(实例变量或 static 变量):
- 所有整数类型(byte/short/int/long)→
0(long 是0L) - 浮点类型(float/double)→
0.0f/0.0d -
char →
'\u0000'(Unicode 空字符,不是空格) -
boolean →
false - 方法内声明的局部变量没有默认值,未赋值就使用会编译失败
使用建议:按场景选型,警惕隐含陷阱
类型选择不只是“够用就行”,更影响正确性与性能:
- 高频小整数(如状态码、像素值)优先用
byte或short,但注意算术运算时会自动提升为int - ID、时间戳、大计数器必须用
long,赋大常量要加L后缀(如1234567890123456789L) - 金融或精确计算不用
float/double,改用BigDecimal;0.1 + 0.2 != 0.3是常态 - 布尔逻辑只用
true/false,禁止用1/0模拟,也不可与整数互转


















