gpt4 book ai didi

java - 为什么我在无限循环代码中有不同的结果

转载 作者:行者123 更新时间:2023-11-29 09:58:40 25 4
gpt4 key购买 nike

我有代码:

    public static void main(String[] args) {
int i=0;
while(true){
i++;
System.out.println(i); //(1)
if(i==-1){
break;
}
}
}

如果有代码(1),它将无限循环运行,但是如果没有代码(1),代码不能在无限循环中运行并且没有错误就像没有循环一样,但是如果我在调试模型中运行,它可以在无限循环中运行。

那么为什么会有这样的结果。

我的IDE是idea,java1.8

最佳答案

这段代码不是死循环。

i 最终会因为整数溢出而变成负数。它会溢出到 Integer.MIN_VALUE,最终会达到 -1。

但是,当您包含该打印语句时,它需要很长时间才能完成(它必须打印超过 40 亿个 i 值),所以它看起来是无穷无尽的。

当您删除 print 语句时,它会变得更快。

也就是说,如果编译器决定循环什么都不做,它甚至可能决定优化整个循环,这会将运行时间减少到 0。

如果您添加一个仅打印少量值的条件,您可以看到即使使用 println 语句,循环也会终止,这将使执行速度更快。

例如,每1亿个值打印一次:

public static void main(String[] args) {
int i=0;
while(true) {
i++;
if (i%100000000 == 0) System.out.println(i);
if(i==-1){
break;
}
}
}

将输出:

100000000
200000000
300000000
400000000
500000000
600000000
700000000
800000000
900000000
1000000000
1100000000
1200000000
1300000000
1400000000
1500000000
1600000000
1700000000
1800000000
1900000000
2000000000
2100000000
-2100000000
-2000000000
-1900000000
-1800000000
-1700000000
-1600000000
-1500000000
-1400000000
-1300000000
-1200000000
-1100000000
-1000000000
-900000000
-800000000
-700000000
-600000000
-500000000
-400000000
-300000000
-200000000
-100000000

并终止。

关于java - 为什么我在无限循环代码中有不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54850468/

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