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

Java多个整数单行相乘结果溢出的原因及正确写法

原因分析

  • Java中未指定类型的整数字面量默认是int类型,32位有符号int的取值范围为 -2147483648 ~ 2147483647。
  • 单行计算场景下,所有参与运算的数字都是int字面量,整个乘法流程全程以int类型执行,最终结果32572800000远超出int的最大值,运算过程中发生整数溢出,得到错误的负数结果后才赋值给long类型变量,此时溢出已经发生,结果无法修正。
  • 分步计算场景下,第一步就将1000赋值给了long类型的maxDays,后续每次乘法都是long与int运算,int会自动向上转型为long,全程用64位long执行运算,不会触发溢出,结果正确。

单行计算的正确实现

只需要保证运算链的第一个操作数为long类型,后续所有运算都会自动提升为long类型即可,推荐两种写法:

  1. 给首个数字添加L后缀标记为long字面量(推荐用大写L,避免小写l和数字1混淆):
maxDays = 1000L * 24 * 60 * 60 * 377;
  1. 显式将首个操作数强转为long:
maxDays = (long) 1000 * 24 * 60 * 60 * 377;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 14:15:07