java基本数据类型取值范围由位数和编码规则决定:有符号整型用补码公式(最小值=−2ⁿ⁻¹,最大值=2ⁿ⁻¹−1);char为无符号16位(0~65535);float/double依ieee 754标准;boolean仅有true/false语义值。

Java 基本数据类型的取值范围不是靠死记硬背,而是由位数和编码规则严格决定的。掌握推导逻辑,才能在边界处理、类型选型和溢出排查中真正用得上。
有符号整数:统一用补码公式计算
byte、short、int、long 都是带符号的二进制补码表示,因此共享同一套公式:
- 最小值 = −2n−1(n 是总位数)
- 最大值 = 2n−1 − 1
例如:
byte(8 位) → 最小值 = −2⁷ = −128,最大值 = 2⁷ − 1 = 127
int(32 位) → 最小值 = −2³¹ = −2147483648,最大值 = 2³¹ − 1 = 2147483647
long(64 位) → 直接套用即可,无需额外记忆具体数字
char:无符号 16 位,按纯二进制算
char 不参与补码运算,它本质是 0 到 216−1 的无符号整数,对应 Unicode 编码空间:
- 最小值 = 0
- 最大值 = 2¹⁶ − 1 = 65535(即 \uFFFF)
所以 '中'(Unicode 值 20013)、'?'(U+1F60A = 128522,超出 char 范围,需用 surrogate pair 或 String)是否能存进 char,一眼就能判断。
float/double:IEEE 754 决定非线性分布
它们的范围不由简单幂次决定,而是由符号位、指数位、尾数位三部分协同生成:
- float(32 位):1 位符号 + 8 位指数 + 23 位尾数 → 可表示约 ±3.4×10³⁸,但最小正正规数是 ≈1.4×10⁻⁴⁵
- double(64 位):1 位符号 + 11 位指数 + 52 位尾数 → 可表示约 ±1.7×10³⁰⁸,最小正正规数 ≈4.9×10⁻³²⁴
注意:Float.MIN_VALUE 指的是最小正数,不是负下限;真正的负下限是 −Float.MAX_VALUE。
boolean:没有数值范围,只有语义契约
它不适用任何数学公式——JVM 规范未规定其内存大小,也不允许做算术运算。它的“取值”仅是语言层面的 true/false 两个逻辑状态:
- 字段默认值为 false
- 不能转成 int,也不能参与位运算
- 数组实际按 byte 存储(如 boolean[100] 占约 100 字节),但单个值不可寻址或比较大小
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











