考虑以下代码:
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
,其最大值为2147483647
,For-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
如何在没有任何错误或异常的情况下终止?
答案 0 :(得分:10)
你的System.out.println();应该是++i
。
的System.out.println(++ I);
您的假设是正确的,当我们增加i
时,i = 2147483647
,i
变为-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
查看更改后的值。