Java基本数据类型取值范围由位数和编码规则决定:整数用补码公式(如byte为-128~127),char为无符号16位(0~65535),float/double遵循IEEE 754标准,boolean仅有true/false两个逻辑值。

Java 基本数据类型的取值范围不是靠死记硬背,而是由位数和编码规则严格决定的。掌握计算逻辑,才能在类型选型、边界校验、溢出排查中准确应对。
整数类型:统一用补码公式
byte、short、int、long 都是有符号整数,采用二进制补码表示,因此共享同一套推导公式: - 最小值 = −2n−1 - 最大值 = 2n−1 − 1 其中 n 是该类型的总位数(1 字节 = 8 位)。例如:
- byte(8 位) → −2⁷ = −128,2⁷ − 1 = 127
- short(16 位) → −2¹⁵ = −32768,2¹⁵ − 1 = 32767
- int(32 位) → −2³¹ = −2147483648,2³¹ − 1 = 2147483647
- long(64 位) → −2⁶³ 和 2⁶³ − 1(数值极大,建议直接用 Long.MIN_VALUE / MAX_VALUE)
char 类型:无符号 16 位,纯二进制上限
char 不参与补码运算,本质是无符号整数,直接对应 Unicode 码点: - 最小值 = 0 - 最大值 = 2¹⁶ − 1 = 65535(即 '\u0000' 到 '\uffff') 所以像 '中'(Unicode 20013)能存,但 emoji 如 '?'(U+1F60A = 128522)已超出范围,需用 String 或 surrogate pair 处理。浮点类型:IEEE 754 决定非线性分布
float 和 double 的范围不由简单幂次决定,而是由三部分协同生成: - float(32 位):1 位符号 + 8 位指数 + 23 位尾数 - 可表示约 ±3.4×10³⁸ - 最小正正规数 ≈ 1.4×10⁻⁴⁵(注意:Float.MIN_VALUE 指这个,不是负下限) - 真正负下限是 −Float.MAX_VALUE-
double(64 位):1 位符号 + 11 位指数 + 52 位尾数
- 可表示约 ±1.7×10³⁰⁸
- 最小正正规数 ≈ 4.9×10⁻³²⁴
boolean 类型:没有数值范围,只有语义值
- 它不适用任何数学公式 - JVM 规范未规定其内存大小(常见实现为 1 字节,但不可依赖) - 仅允许 true / false 两个逻辑状态 - 不支持算术运算、位操作或与整数互转 - 成员变量默认值为 false;局部变量必须显式初始化写代码时推荐直接使用内置常量,比如 Integer.MAX_VALUE、Character.MAX_VALUE、Double.MAX_VALUE,避免手算出错或记混位数。


















