为什么代码在一个空的无限循环之后执行?

Why does code execute after an empty infinite loop?

我搜索了 google 和堆栈溢出,但我没有得到这个问题的任何答案。 在这里,在这段代码中有一个空的无限循环,然后打印“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");
    }
}

谢谢。

要么是编译器变聪明了,知道在该循环中什么也没做(这应该无关紧要,因为即使是 for 条件也可以编辑内容)

i循环了200万次,溢出成负数,小于0。

当 i 变得大于最大值(2147483648 - 可以用 32 位表示)时,它溢出到它的最小值。 它运行了 exaclty 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);
}

}

这个循环不是无限循环。它一直持续到 i 达到 Integer.MAX_VALUE。然后 i 变成 Integer.MIN_VALUE 这是一个负值。 运行 下面的代码并检查输出。

int x = Integer.MAX_VALUE;
x++;
System.out.println(x);

如果你想循环无限使用,

for ( ; ; ){
}