gpt4 book ai didi

java - 为什么 For 循环不终止?

转载 作者:搜寻专家 更新时间:2023-11-01 01:13:09 26 4
gpt4 key购买 nike

考虑下面的代码:

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,当我们增加 iFor-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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com