作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
考虑下面的代码:
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
,当我们增加 i
时 For-Loop
终止,即 i++
,当 i = 2147483647
时。
所以我假设,当我们在 i = 2147483647
时增加 i
时,i
的值将变为负数或零,所以条件变为 false
,并且 For-Loop
终止。
为了确认,我尝试了以下代码:
int i = 2147483647; // Maximum value of int
System.out.println(i++);
因此,如果我的假设是正确的,它应该打印任何负数或零值。但是我得到了以下输出:
2147483647
这是我的问题/疑问:
当我们增加i
的值时,当i = 2147483647
时,i
的值还是一样的,即2147483647
。那么在上面的场景中,For-loop
是如何在没有任何错误或异常的情况下终止的呢?
最佳答案
它应该是 ++i
在你的 System.out.println(); 中。
System.out.println(++i);
你的假设是正确的,当我们增加i
时,当i = 2147483647
时,i
变成-2147483648
.
关于java - 为什么 For 循环不终止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19373211/
我是一名优秀的程序员,十分优秀!