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

Java中如何检测int类型整数乘法运算的溢出错误

Java整数幂次计算溢出检测方案

方案1:手动前置溢出判断(兼容所有Java版本,无需异常处理)

每次执行乘法前做前置校验:如果当前result > Integer.MAX_VALUE / base,那么result * base必然超出32位int的取值范围,直接触发溢出提示即可。

int base = 10, power = 10, result = 1;
boolean overflow = false;
for (int i = 1; i <= power; i++) {
    // 提前判断乘法后是否会溢出
    if (result > Integer.MAX_VALUE / base) {
        overflow = true;
        break;
    }
    result *= base;
}
if (overflow) {
    System.out.println("result数据类型为32位int,不得超过2,147,483,647");
} else {
    System.out.println(base + " to the power of " + power + " result: " + result);
}

方案2:使用Java 8+内置精确乘法方法(代码更简洁)

java.lang.Math提供的multiplyExact方法执行int乘法时如果发生溢出会主动抛出ArithmeticException,捕获该异常即可处理溢出场景。

int base = 10, power = 10, result = 1;
try {
    for (int i = 1; i <= power; i++) {
        result = Math.multiplyExact(result, base);
    }
    System.out.println(base + " to the power of " + power + " result: " + result);
} catch (ArithmeticException e) {
    System.out.println("result数据类型为32位int,不得超过2,147,483,647");
}

方案3:用long存储中间结果,最终校验(实现最简单)

如果计算的幂次不会超过long的取值范围,直接用64位long存储计算过程的结果,最后判断是否超出int最大值即可:

int base = 10, power = 10;
long result = 1;
for (int i = 1; i <= power; i++) {
    result *= base;
}
if (result > Integer.MAX_VALUE) {
    System.out.println("result数据类型为32位int,不得超过2,147,483,647");
} else {
    System.out.println(base + " to the power of " + power + " result: " + (int)result);
}

内容的提问来源于stack exchange,提问作者Hakan ÖZHAN

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 14:48:03