java – 看似无限循环终止,除非使用System.out.println
作者:互联网
我有一个简单的代码,应该是一个无限循环,因为x将永远增长,并将始终保持大于j.
int x = 5;
int y = 9;
for (int j = 0; j < x; j++) {
x = x + y;
}
System.out.println(y);
但是按原样,它打印y并且不会无休止地循环.我无法弄清楚为什么.但是,当我按以下方式调整代码时:
int x = 5;
int y = 9;
for (int j = 0; j < x; j++) {
x = x + y;
System.out.println(y);
}
System.out.println(y);
它变成了无限循环,我不明白为什么. java是否认识到它是无限循环并在第一种情况下跳过它但是必须在第二种情况下执行方法调用,以便它按预期运行?
困惑:)
解决方法:
这两个例子都不是无穷无尽的.
问题是Java中的int类型(或几乎任何其他常用语言)的限制.当x的值达到0x7fffffff时,添加任何正值将导致溢出,x变为负值,因此低于j.
第一个和第二个循环之间的区别在于内部代码需要花费更多时间,并且在x溢出之前可能需要几分钟.对于第一个示例,它可能需要不到第二个或最有可能的代码将被优化器删除,因为它没有任何影响.
如讨论中所述,时间将在很大程度上取决于OS如何缓冲输出,是否输出到终端仿真器等,因此它可能远高于几分钟.
标签:java,for-loop,infinite-loop 来源: https://codeday.me/bug/20190928/1827153.html