文章目录
- 一、什么是 MIN_VALUE 和 MAX_VALUE?
- 二、Java 常见数值类型的取值范围
- 整型(Integer Types)
- 浮点型(Floating Point Types)
- 三、为什么 MIN_VALUE 不是 -MAX_VALUE?
- 四、MIN_VALUE / MAX_VALUE 的底层定义
- 五、溢出问题(非常重要)
- 六、常见陷阱
- ❓ 1. 下面代码输出什么?
- ❓ 2. 如何安全取绝对值?
- 七、在算法中的常见用法
- 初始化最大 / 最小值
- 边界判断
- 哨兵值(Sentinel Value)
- 八、包装类 vs 基本类型
- 九、BigInteger / BigDecimal 有没有 MAX_VALUE?
一、什么是 MIN_VALUE 和 MAX_VALUE?
在 Java 中,每一种数值型包装类都定义了两个常量:
MIN_VALUE:该类型能表示的最小值MAX_VALUE:该类型能表示的最大值
例如:
System.out.println(Integer.MIN_VALUE);// -2147483648System.out.println(Integer.MAX_VALUE);// 2147483647二、Java 常见数值类型的取值范围
整型(Integer Types)
| 类型 | 位数 | MIN_VALUE | MAX_VALUE |
|---|---|---|---|
| byte | 8 | -128 | 127 |
| short | 16 | -32768 | 32767 |
| int | 32 | -2147483648 | 2147483647 |
| long | 64 | -9223372036854775808 | 9223372036854775807 |
示例:
System.out.println(Byte.MIN_VALUE);System.out.println(Long.MAX_VALUE);浮点型(Floating Point Types)
| 类型 | MIN_VALUE 含义 | MAX_VALUE |
|---|---|---|
| float | 最小正数 | ≈ 3.4028235E38 |
| double | 最小正数 | ≈ 1.7976931348623157E308 |
⚠️注意:浮点型的MIN_VALUE不是负数!
System.out.println(Float.MIN_VALUE);// 1.4E-45System.out.println(-Float.MAX_VALUE);// 才是最小负值这个结果和浮点数本身的底层实现有关
因为浮点型的设计目标是:
尽可能精确地表示“接近 0 的小数”
而不是只关心负数边界。
如想进一步了解,可参考IEEE 754标准。
三、为什么 MIN_VALUE 不是 -MAX_VALUE?
以int为例:
int 占用 32 位 范围是:-2³¹ ~ 2³¹ - 1即:
-2147483648 ~ 2147483647原因:补码
- 最高位是符号位
- 负数比正数多一个
- 所以:
Integer.MIN_VALUE==-Integer.MAX_VALUE-1四、MIN_VALUE / MAX_VALUE 的底层定义
以Integer为例:
publicstaticfinalintMIN_VALUE=0x80000000;publicstaticfinalintMAX_VALUE=0x7fffffff;二进制形式:
MIN_VALUE = 10000000 00000000 00000000 00000000 MAX_VALUE = 01111111 11111111 11111111 11111111五、溢出问题(非常重要)
示例:MAX_VALUE + 1
inta=Integer.MAX_VALUE;intb=a+1;System.out.println(b);// -2147483648发生整数溢出,但 Java 不会抛异常!
同理:
intc=Integer.MIN_VALUE;System.out.println(c-1);// 2147483647六、常见陷阱
❓ 1. 下面代码输出什么?
intx=Integer.MIN_VALUE;System.out.println(Math.abs(x));输出:
-2147483648📌 原因:
abs(Integer.MIN_VALUE)仍然是MIN_VALUE- 因为正数范围不够表示它
❓ 2. 如何安全取绝对值?
intsafeAbs(intx){if(x==Integer.MIN_VALUE){thrownewArithmeticException("Overflow");}returnMath.abs(x);}七、在算法中的常见用法
初始化最大 / 最小值
intmax=Integer.MIN_VALUE;intmin=Integer.MAX_VALUE;边界判断
if(value>Integer.MAX_VALUE){// overflow}哨兵值(Sentinel Value)
intresult=Integer.MIN_VALUE;// 表示“尚未计算”八、包装类 vs 基本类型
| 对比 | 基本类型 | 包装类 |
|---|---|---|
| 是否有 MIN_VALUE | ❌ | ✔ |
| 是否有 MAX_VALUE | ❌ | ✔ |
| 推荐用法 | 计算 | 常量、泛型、工具方法 |
示例:
inta=10;Integerb=Integer.MAX_VALUE;九、BigInteger / BigDecimal 有没有 MAX_VALUE?
❌没有!
BigIntegerbig=newBigInteger("999999999999999999999");📌 原因:
- BigInteger 是“任意精度”
- 不存在固定上限