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

时间:2017-06-05 09:22:25

标签: java for-loop

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

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

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

2 个答案:

答案 0 :(得分:13)

int 到达2,147,483,647时,包围到-2,147,483,648。

这会导致条件i > 0评估为false

这是Java中完全定义良好的行为:尽管在C或C ++中你不能这样做。

如果你试图在循环中打印某些内容,那么循环的速度会大幅下降,而你可能已经没有耐心了。在输出中加入i的当前值,并亲自看看:即使每秒1000次迭代输出也需要将近一个月才能达到环绕点!

答案 1 :(得分:1)

算术整数运算以32位精度执行。当操作的结果值大于32位(int变量可以保持的最大大小)时,仅考虑低32位并丢弃高位。当MSB(最高有效位)为1时,该值被视为负值。 在你的情况下,它变为负面,条件变为假。