[英]Peculiar behaviour of for loop in java
今天在阅读拳击和自动拳击时,我想出了一个场景,并发现我被困在无限循环中的奇特行为。
我检查了我的代码两次,但我没有发现任何错误。 如果有人可以看,并建议我在哪里做错了,这样我就会出现这个无限循环
请找到下面的代码。
public class InTheLoop {
public static final int END = Integer.MAX_VALUE;
public static final int START = END - 100;
public static void main(String[] args) {
int count = 0;
//Infinite loop starts.
for (int i = START; i <= END; i++) {
count++;
System.out.println(count);
}
// This never got printed.
System.out.println("hi I am out of for loop" +count);
}
}
请注意,您的END
等于Integer
可以容纳的最大可能值(值为2147483647
)。 这意味着对于i
可能持有的任何值, i <= END
始终为真。 当i
实际达到2147483647
,它仍然<= END
。 在下一次迭代中,您尝试将其递增1,这会导致溢出,并且i
变为-2147483648
,仍然<= END
,并且循环将永远继续。
这是因为你设置了i <= END ,一旦达到Integer.MAX_VALUE,就会执行increment(i ++),这使得-2147483648(Integer.MAX_VALUE + 1)。
这就是为什么它不会破坏并继续运行。
改变,
for (int i = START; i <= END; i++) {
至
for (int i = START; i < END; i++) {
会解决的。
for (int i = START; i <= END; i++) {
==>这里i <= END;
是罪魁祸首。
当循环运行时, i
在每次迭代时递增1,然后将其与end进行比较。 所以,
最初 - i = 2147483547
一旦i
到达2147483647
(Integer.Max_VALUE),它再次递增1,所以,你得到一个溢出和循环
这样的事情发生了:
2147483645
2147483646
2147483647
-2147483648
-2147483647
-2147483646.
将您的代码更改为: for (int i = START; i < END; i++) {
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.