You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Math.incrementExact未按API文档抛出溢出异常?

为什么Math.incrementExact没有抛出异常?

这事儿得拆成两步看,你写的代码里藏了个容易忽略的细节:

  • 第一步:参数先发生了静默溢出
    2_147_483_647是int类型的最大值(也就是Integer.MAX_VALUE),当你计算2_147_483_647 + 1的时候,这是两个int值的加法运算。Java里整数类型(byte/short/int/long)的常规算术运算都是静默溢出的——溢出后不会抛异常,而是按照二进制补码的规则循环取值。所以这个加法的结果其实是-2147483648(也就是Integer.MIN_VALUE),而不是你以为的超出int范围的数。

  • 第二步:incrementExact的操作并没有溢出
    当你把-2147483648传给Math.incrementExact()时,这个方法做的是给参数加1,得到-2147483647。这个值完全在int的合法范围内(int的范围是-2147483648到2147483647),所以自然不会触发溢出异常,直接返回这个结果。

如果想触发incrementExact的溢出异常,你应该直接传2_147_483_647,也就是写:

System.out.println(Math.incrementExact(2_147_483_647));

这时候方法内部给最大值加1,才会超出int范围,抛出ArithmeticException。

内容的提问来源于stack exchange,提问作者matua

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:40:02