我为此搜索了谷歌和堆栈溢出,但我没有得到这个问题的任何答案。 在这里,在这段代码中有一个空的无限循环,然后打印“Hello, World”。 从理论上讲,在无限循环之后,无限循环之后不应打印任何内容。但是当我们运行代码时,它会打印“Hello, World”。 那么,为什么死循环后写的代码会执行?
public class Main{
public static void main(String[] args){
for(int i=0; i>=0; i++){}
System.out.println("Hello, World");
}
}
谢谢。
答案 0 :(得分:7)
当 i 大于最大值(2147483648 - 可以用 32 位表示)时,它会溢出到它的最小值。 它运行了精确的 Integer.MAX_VALUE 次,因为 Integer.MAX_VALUE + 1 是 Integer.MIN_VALUE,一个负数。
你可以像这样可视化你的代码:
class Main {
public static void main(String[] args) {
int i = 0;
for(i=0; i>=0; i++){}
System.out.println("Hello, World : "+ i);
}
}
答案 1 :(得分:4)
这个循环不是无限循环。直到 timeElapsed
到达 i
。然后 Integer.MAX_VALUE
变成 i
,这是一个负值。运行下面的代码并检查输出。
Integer.MIN_VALUE
如果你想让循环无限使用,
int x = Integer.MAX_VALUE;
x++;
System.out.println(x);
答案 2 :(得分:0)
要么编译器聪明了,知道在那个循环中什么也没做(这应该无关紧要,因为即使是 for 条件也可以编辑内容)
或 i
循环了 200 万次并溢出为负数,使其小于 0。