Java基本数据类型取值范围由位数和编码规则严格决定:整数用补码(如byte -128~127)、char为无符号16位(0~65535)、浮点遵循IEEE 754(float±3.4×10³⁸/7位精度,double±1.7×10³⁰⁸/15位精度),需防范溢出、截断与精度误差。

Java基本数据类型取值范围不是经验数值,而是由位数和编码规则严格决定的。掌握边界来源,才能在数值计算中规避溢出、截断和隐式转换风险。
整数类型:补码边界决定安全上下限
byte、short、int、long 均为有符号二进制补码表示,最高位是符号位。n 位整数能表示 2ⁿ 个不同值,其中一半分配给负数(含 -2ⁿ⁻¹),一半给非负数(0 到 2ⁿ⁻¹−1)。
- byte(8位):-128 ~ 127 → 超出时编译器报错(字面量赋值)或运行时静默溢出(运算结果)
- int(32位):-2147483648 ~ 2147483647 →
Integer.MAX_VALUE + 1结果为Integer.MIN_VALUE - long(64位):-9223372036854775808 ~ 9223372036854775807 → 大数运算建议用
Math.addExact()等抛异常方法替代普通+、-
char 类型:无符号16位,不参与符号运算
char 本质是 0 ~ 65535 的无符号整数,没有负值概念。它不适用补码公式,也不支持负号字面量赋值。
-
char c = -1;编译直接失败 —— 因为 -1 不在 0~65535 范围内 -
char c = 65535;合法,对应 Unicode 最大基本多文种平面字符 - 与 int 混合运算时自动提升为 int,但赋值回 char 需显式强制转换,且必须确保值在 0~65535 内,否则运行时截断
浮点类型:IEEE 754 决定精度与范围分离
float 和 double 的“范围”和“精度”是两个独立维度。范围由指数位决定,精度由尾数位决定;超出精度会导致舍入误差,超出范围则变为 ±Infinity 或 NaN。
立即学习“Java免费学习笔记(深入)”;
- float(32位):可表示约 ±3.4×10³⁸,但仅约 7 位十进制有效数字 →
0.1f + 0.2f != 0.3f - double(64位):可表示约 ±1.7×10³⁰⁸,约 15~16 位有效数字 → 仍是二进制近似,非精确十进制
- 比较浮点数应避免
==,改用Math.abs(a - b) ;金融计算务必使用 <code>BigDecimal
boolean 与默认值:语义边界不可数值化
boolean 不是数值类型,只有 true/false 两个逻辑状态,JVM 不规定其内存大小(常见实现为 1 字节,但数组中 boolean[] 实际按 byte[] 模拟)。它的“边界”是语言契约,而非数学区间。
- 无法对 boolean 做算术运算或与其他类型强制转换
- 成员变量默认为 false,局部变量必须显式初始化,否则编译报错
- 不要用
int flag = 1模拟布尔逻辑 —— 违反语义,易引发误判和维护困难


















