关于java:为什么这个无限循环在一段时间后终止?

Why is this infinite for loop terminating after some time?

本问题已经有最佳答案,请猛点这里访问。

我正在运行这个无限的for循环。为什么这个for循环在一段时间后终止?

1
for(int i = 10; i > 0; i++) { }

但如果我在这个for循环中打印一些东西,那么它就不会终止。为什么?


当它达到2147483647时,int将其包裹到-2147483648。

这使得条件i > 0false进行评估。

在爪哇,这是一个完美定义的行为:在C或C++中,你不能这么做。

如果你想在循环中打印一些东西,那么循环的速度会大大降低,你可能已经没有耐心了。把EDOCX1[3]的当前值合并到输出中,你自己看看:即使是每秒1000次的输出迭代也需要将近一个月才能到达环绕点!


算术整数运算以32位精度执行。当一个操作的结果值大于32位(整型变量可以容纳的最大大小)时,则仅考虑低32位,而丢弃高阶位。当msb(最高有效位)为1时,该值被视为负数。在你的情况下,当它变成消极的,条件变成错误。