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

Java中int与long类型乘法溢出问题求助

问题分析与解决办法

问题根源

你遇到的是整数溢出问题,核心原因是运算顺序导致的类型截断:

  • int类型的取值范围是 -2147483648 到 2147483647,而123456789 × 987654321的结果远超出这个范围。
  • 代码中n1*n2是两个int类型的运算,结果会先被当作int处理,溢出后产生错误的负数,再赋值给long变量时,这个错误值不会被修正。

解决方案

1. 提前转换类型避免溢出

在乘法运算前,将任意一个int操作数强制转换为long,这样整个运算会以long类型执行(long的范围足够容纳该乘积):

int n1 = 123456789;
int n2 = 987654321;
long ans = (long)n1 * n2;

或者直接将变量声明为long类型,从根源上避免溢出:

long n1 = 123456789;
long n2 = 987654321;
long ans = n1 * n2;

2. 超大整数用BigInteger处理

如果后续需要处理更大的整数(超出long的范围,long最大值为9223372036854775807),可以使用Java的BigInteger类,它支持任意精度的整数运算:

import java.math.BigInteger;

public class Main {
    public static void main(String[] args) {
        BigInteger n1 = new BigInteger("123456789");
        BigInteger n2 = new BigInteger("987654321");
        BigInteger ans = n1.multiply(n2);
        System.out.println(ans); // 输出正确结果121932631112635269
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 04:25:16