为什么For循环不会终止?

Len*_*enn 4 java for-loop

考虑以下代码:

public class Test {
     public static void main(String args[]) {
      long startTime = System.nanoTime();
      for(int i = 1; i > 0; i++) {
       System.out.println(i);
      }
      System.out.println(System.nanoTime() - startTime);  
     }
}
Run Code Online (Sandbox Code Playgroud)

输出:

1
2
3
4
5
.
.
.
2147483643
2147483644
2147483645
2147483646
2147483647
16825610038948
Run Code Online (Sandbox Code Playgroud)

我无法startTime从Eclipse控制台获得价值,因为有大量的线路.

我们将上述For-Loop称为Infinite Loop因为i值始终大于零.从理论上讲,循环不应该终止.但是,因为我们使用int,其最大值是2147483647,For-Loop当我们递增时终止i,即i++何时终止i = 2147483647.

所以我假设,当我们增加ii = 2147483647,值i将变为负数或零,因此条件变为false,并且For-Loop终止.

所以为了确认,我尝试了下面的代码:

int i = 2147483647; // Maximum value of int
System.out.println(i++);
Run Code Online (Sandbox Code Playgroud)

因此,如果我的假设是正确的,它应该打印任何负数或零值.但我得到以下输出:

2147483647

这是我的疑问/怀疑:

当我们增加i值时i = 2147483647,值i仍然是相同的,即2147483647.那么For-loop,在上面的场景中,如何在没有任何错误或异常的情况下终止?

Gok*_* KP 10

它应该++i在你的System.out.println();中.

的System.out.println(++ⅰ);

你的假设是正确的,当我们增加i,何时i = 2147483647,i成为-2147483648.