我正在运行这个无限for
循环。为什么这个for
循环会在一段时间后终止?
for(int i = 10; i > 0; i++) { }
但是如果我在这个for
循环中打印一些内容,那么它就不会终止。为什么这样?
答案 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时,该值被视为负值。 在你的情况下,它变为负面,条件变为假。