gpt4 book ai didi

java - 为什么在 while 循环中递增 int 原语不会永远循环

转载 作者:行者123 更新时间:2023-12-02 20:38:13 25 4
gpt4 key购买 nike

我有以下代码示例

int i = 1;  

while(i != 0) {
i++;
}

我原以为它会无限循环运行,但事实并非如此。然后,当我在 while 循环后打印值时,我得到:

i value is 0.  

谁能告诉我到底发生了什么?

最佳答案

I was expecting this to run in an infinite loop but it didn't.

不,不会。 最终该值将再次变为 0。

特别是,它在逻辑上会像这样执行:

1
2
3
...
2,147,483,646
2,147,483,647
-2,147,483,648 // Integer overflow => wrapping
-2,147,483,647
...
-3
-2
-1
0

...然后循环将结束

来自section 15.18.2 of the JLS :

If an integer addition overflows, then the result is the low-order bits of the mathematical sum as represented in some sufficiently large two's-complement format. If overflow occurs, then the sign of the result is not the same as the sign of the mathematical sum of the two operand values.

此代码不存在内存问题,因为它不执行任何分配 - 它只是增量局部变量,完全在堆栈上。

现在,无论它是否实际上做到这一点是另一回事 - 如果 JIT 能够在不执行每次迭代的情况下计算出行为是什么,它可以将其优化掉 - 但这是一个问题实现细节。重要的是理解行为背后的逻辑。

关于java - 为什么在 while 循环中递增 int 原语不会永远循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21085524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com