为什么递增Java int最终导致负数?
我试图检查不同的输入并在java中创建无限循环,我发现一旦int
超过最大限制,它就会变成负数-2147482958
。我只是在无限循环中增加int
…
码:
public static void infiniteLoop(){ for(int i=0;i>-1;i++){
i = i + 1000;
System.out.println(i);
}
}
最后输出的价值是,
2147483337-2147482958
现在,为什么会变成负数?
回答:
为什么会变成负面?
因为这是在int
计算溢出时指定在Java中发生的事情。
JLS
15.18.2
“如果整数加法溢出,则结果是数学和的低阶位,以某种足够大的二进制补码格式表示。如果发生溢出,则结果的符号与整数的符号不同。两个操作数值的数学和。”
(这并不明确表示溢出总是给出负数。也并非总是如此。但是,如果您应用该规则,它的确说明了为什么增加Integer.MAX_VALUE
by
+1
会给您Integer.MIN_VALUE
…)
以上是 为什么递增Java int最终导致负数? 的全部内容, 来源链接: utcz.com/qa/401393.html