Sri*_*nji 2 java increment post-increment
我有以下代码示例
int i = 1;
while(i != 0) {
i++;
}
Run Code Online (Sandbox Code Playgroud)
我期待这个在无限循环中运行,但事实并非如此.然后,当我在while循环后打印值时,我得到了:
i value is 0.
Run Code Online (Sandbox Code Playgroud)
谁能告诉我究竟发生了什么?
Jon*_*eet 17
我期待这个在无限循环中运行,但事实并非如此.
不,它不会.最终该值将再次变为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
Run Code Online (Sandbox Code Playgroud)
...然后循环结束
如果整数加法溢出,则结果是数学和的低阶位,如某些足够大的二进制补码格式所示.如果发生溢出,则结果的符号与两个操作数值的数学和的符号不同.
此代码没有内存问题,因为它不执行任何分配 - 它只是增加一个局部变量,完全在堆栈上.
现在它是否真的这样做是另一回事 - 如果JIT能够在不执行每次迭代的情况下计算出行为将会是什么,它可以优化它 - 但这是一个实现细节.重要的是要理解行为背后的逻辑.
| 归档时间: |
|
| 查看次数: |
379 次 |
| 最近记录: |