java基础类型取值范围由二进制编码规则严格决定:整数用补码(如byte为-128~127),char是0~65535无符号整数,float/double遵循ieee 754标准,boolean仅有true/false语义,开发中须主动做边界校验。

Java基础类型取值范围不是凭经验猜的,而是由底层二进制编码规则严格决定的。写代码时若只记“int是-21亿到21亿”,容易在边界场景出错;真正安全的做法,是理解每种类型为什么有这个上限和下限,并在开发中主动做边界校验。
整数类型:补码决定上下界
byte、short、int、long 全部采用有符号补码表示,关键点在于:最高位是符号位,其余位参与数值表达。因此n位整数能表示 2ⁿ 个不同值,其中一半归负数、一半归非负数(含0)。
- byte(8位)→ -2⁷ 到 2⁷−1,即 -128 到 127;10000000₂ 表示 -128,不是 -0
- short(16位)→ -32768 到 32767;超出会静默截断,比如 32768 赋给 short 变成 -32768
- int(32位)→ -2147483648 到 2147483647;常被误认为“足够大”,但累加、乘法极易溢出
- long(64位)→ -9223372036854775808 到 9223372036854775807;适合时间戳、ID等大数场景
char 类型:无符号16位,纯正整数语义
char 不是“字符类型”意义上的特殊存在,它本质是 0~65535 的无符号整数,对应 Unicode 基本多文种平面(BMP)全部码点。它没有负值,也不参与符号运算。
- 声明 char c = -1; 编译直接失败——字面量 -1 不在合法范围内
- char c = 65535; 合法,对应 '\uffff';再+1 就越界,需显式转换或改用 int 处理
- 做算术时(如 c++),实际按 int 运算,但赋值回 char 时仍会截断高位
浮点类型:IEEE 754 决定精度与范围
float 和 double 不是“近似值”的模糊概念,而是遵循 IEEE 754 标准的确定性格式:符号位 + 指数位 + 尾数位。它们的“范围”指可表示的最大/最小绝对值,“精度”则取决于尾数位数。
- float(32位):约 ±1.4×10⁻⁴⁵(最小正数)到 ±3.4×10³⁸(最大有限值),有效位约7位十进制数字
- double(64位):约 ±4.9×10⁻³²⁴ 到 ±1.8×10³⁰⁸,有效位约15~16位
- 0.1 + 0.2 != 0.3 是必然结果,不是 bug;金融计算必须用 BigDecimal 或整数单位(如分)
boolean 与边界安全实践建议
boolean 只有两个逻辑值 true/false,JVM 不规定其存储大小,也不允许与整数互转。它的“边界”不在数值上,而在语义完整性上。
- 禁止用 0/1 替代 boolean;if (flag == 1) 是反模式,应写 if (flag)
- 方法返回 boolean 时,避免返回 null(除非用 Optional
);默认 false 更安全 - 涉及范围判断时,优先用常量或静态方法封装逻辑,例如:isInRange(value, MIN, MAX)
- 输入校验应前置——读配置、解析JSON、接收HTTP参数时,立即检查是否在目标类型合法区间内
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











