4

考虑下面的代码:

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

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

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

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

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

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

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

2147483647

这是我的问题/疑问:

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

4

4 回答 4

10

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

System.out.println(++i);

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

于 2013-10-15T04:20:29.663 回答
2

i++不同于++i. 第一个是后增量,第二个是前增量

i++方法

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

而另一个,即您正在寻找的,意味着:

将 的值加i1,然后在表达式中使用它

于 2013-10-15T04:21:11.197 回答
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。

于 2013-10-15T04:55:23.163 回答
0

post incrementi++在 sout 执行后增加值。尝试++i查看更改的值。

于 2013-10-15T05:13:37.820 回答