ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – 看似无限循环终止,除非使用System.out.println

2019-09-28 11:02:56  阅读:156  来源: 互联网

标签:java for-loop infinite-loop


我有一个简单的代码,应该是一个无限循环,因为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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有