int、long、float、double取值范围差异源于位数与编码:int(32位补码,±2³¹−1)、long(64位补码,±2⁶³−1)、float(32位IEEE 754,±1.4e−45~±3.4e+38,6–7位精度)、double(64位IEEE 754,±4.9e−324~±1.8e+308,15–17位精度)。

Java 中 int、long、float、double 的取值范围差异主要源于它们的位数和编码方式:int 和 long 是整型,用补码表示;float 和 double 是浮点型,遵循 IEEE 754 标准。理解这些差异,才能避免溢出、精度丢失等常见问题。
int:32 位有符号整数
占用 4 字节(32 位),使用补码存储。
最小值:-231 = -2,147,483,648
最大值:231 − 1 = 2,147,483,647
典型用途:循环计数、数组索引、一般整数运算。
注意:超过范围会静默溢出(如 2147483647 + 1 → -2147483648)。
long:64 位有符号整数
占用 8 字节(64 位),补码表示。
最小值:-263 = -9,223,372,036,854,775,808
最大值:263 − 1 = 9,223,372,036,854,775,807
声明时需加后缀 L 或 l(推荐大写 L,避免与数字 1 混淆),例如:long x = 123456789012345L;
适用场景:时间戳(毫秒)、大额计数、ID 生成等超出 int 范围的情况。
float:32 位单精度浮点数
遵循 IEEE 754 标准,1 位符号 + 8 位指数 + 23 位尾数(实际精度约 6–7 位十进制有效数字)。
正数范围约:1.4e−45 到 3.4e+38
负数范围对称(-3.4e+38 到 -1.4e−45)
特殊值:NaN、±Infinity、±0.0
⚠️ 不适合精确计算(如金额):0.1f + 0.2f != 0.3f(结果为 0.30000001)
声明可加 f 或 F,例如:float f = 3.14f;
double:64 位双精度浮点数
IEEE 754 标准,1 位符号 + 11 位指数 + 52 位尾数(精度约 15–17 位十进制有效数字)。
正数范围约:4.9e−324 到 1.8e+308
负数范围对称
Java 中浮点字面量默认是 double 类型(如 3.14 就是 double)
比 float 更常用,精度更高、误差更小,但仍不适用于金融计算(应使用 BigDecimal)
比较两个 double 是否相等,应避免直接用 ==,改用 Math.abs(a - b)








