为什么For循环不会终止?

时间:2013-10-15 04:18:24

标签: 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);  
     }
}

输出:

1
2
3
4
5
.
.
.
2147483643
2147483644
2147483645
2147483646
2147483647
16825610038948

我无法从Eclipse控制台获取startTime的值,因为存在大量的行。

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

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

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

int i = 2147483647; // Maximum value of int
System.out.println(i++);

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

2147483647

这是我的疑问/怀疑:

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

4 个答案:

答案 0 :(得分:10)

你的System.out.println();应该是++i

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

您的假设是正确的,当我们增加i时,i = 2147483647i变为-2147483648

答案 1 :(得分:2)

i++++i不同。首先是post-increment while second is a pre-increment

i++表示

  

对表达式使用i的当前值,然后递增

而另一个,你正在寻找的那个,意味着:

  

i的值增加1,然后在表达式

中使用它

答案 2 :(得分:1)

以下代码将详细阐述++ i和i ++

    int i = 0
    System.out.println(" before i++ " + i++);
    System.out.println(" after i++ " + i);
    i = 0;
    System.out.println(" before ++i " + ++i);
    System.out.println(" after ++i " + i);

打印

 before i++ 0
 after i++ 1
 before ++i 1
 after ++i 1

所以

int i = 0;
int j = ++i;
i = 0;
int c = i++;

在这种情况下,j的值将为1,c = 0的值。

答案 3 :(得分:0)

后增量i++在sout执行后递增值。尝试++i查看更改后的值。