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

Java中signed long类型的for循环是死循环还是会溢出终止?

问题结论

你的判断完全正确,这段代码不属于无限循环,最终会正常终止。

判断依据
  • Java中所有整数类型(byte/short/int/long)默认采用有符号补码的存储规则,不存在无符号整数类型,其中long为64位有符号数:
    • 取值范围为 -2^63 到 2^63 - 1,对应常量Long.MIN_VALUE和Long.MAX_VALUE
    • Java的整数溢出属于静默溢出,不会抛出运行时异常,直接按照补码规则截断高位得到运算结果
  • 循环的执行逻辑如下:
    1. x从0开始逐次加1,一直递增到最大值Long.MAX_VALUE(2^63 -1)
    2. 此时再执行x++发生溢出,运算结果为Long.MIN_VALUE(即-2^63)
    3. x继续从Long.MIN_VALUE逐次加1,最终会遍历所有负数取值,直到等于-1
    4. 当x等于-1时,循环条件x != -1不成立,循环退出
  • 整个循环总共会执行2^64次,由于运算量极大,实际运行几乎不可能跑完完整流程,但逻辑上确实存在终止点,不属于无限循环。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 03:06:03