当前位置: 首页 > 面试题库 >

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

韶景曜
2023-03-14
问题内容

我有一段简单的代码,该代码 应该 是一个无休止的循环,因为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是否会识别出一个无穷循环并在第一种情况下跳过它,而在第二种情况下必须执行一个方法调用,以使其表现出预期的效果?困惑:)


问题答案:

这两个例子并不是无止境的。

问题是intJava(或几乎所有其他通用语言)中类型的限制。当值x达到时0x7fffffff,将任何正值相加都会导致溢出,并且x变为负值,因此小于j

第一个循环与第二个循环之间的区别在于,内部代码需要花费更多时间,并且可能要花几分钟才能x溢出。对于第一个示例,它可能会花费不到第二秒的时间,或者很可能是代码会因为没有任何效果而被优化器删除。

正如讨论中提到的,时间将很大程度上取决于OS如何缓冲输出,是否将其输出到终端仿真器等,因此它可能比几分钟要高得多。



 类似资料:
  • 我有一段简单的代码,它应该是一个无休止的循环,因为将一直增长,并且始终大于。 但按原样,它打印并且不会无休止地循环。我想不出为什么。但是,当我以以下方式调整代码时: 它变成了一个无休止的循环,我不知道为什么。java是否认识到它是一个无休止的循环并在第一种情况下跳过它,但在第二种情况下必须执行一个方法调用,这样它的行为就像预期的那样?困惑:)

  • 我在尝试一个测试,我写了这个程序。。。 六羟甲基三聚氰胺六甲醚。。。在下面的代码中,我知道我用了“I”而不是“j”,所以为了解决这个问题,我用了这个 我在节目中遇到的问题是- 在上面的代码中,当我删除这个if块时- 这个节目无限期地进行。。。。。。。。。但当我再次放置这个if块时,程序在执行一段时间后自动终止。我也在这个链接上读到了这一点,但它展示了java的例子 它们显示了负值的原因,但在我的程

  • 问题内容: 我用Java 8编写了一个服务器应用程序,并使用Java 1.8.0u25运行它。 它可以在最初的几个小时内正常工作,但是在收到大约5k至10k请求之后,VM进程的线程使用了其中一个CPU的100%。 因此,我尝试让VM进程检查有问题的线程是什么,它显示线程(线程ID为14303 = 0x37df)为“ C2 CompilerThread0”: 使用,线程的堆栈跟踪如下: 每一次我尝试

  • 启动无限循环后,我无法关闭JFrame。 我想停止无限循环使用停止按钮。 我用开始按钮开始一个无限循环。我想用“停止”按钮关闭那个回路。 > if(stop.getModel(). isP的()){中断;}不工作 actionListener用于识别按钮单击并在循环也不起作用时使用中断语句终止 点击停止按钮,无限循环必须终止。在使用start Button启动无限循环后,我无法使用JFrame中的

  • 问题内容: 我觉得这里缺少明显的东西! 输出: 当然应该输出: 这是怎么了 问题答案: 字典未排序。如果需要依赖顺序,则需要一个OrderedDict- Python 2.7的模块中有一个,或者您可以使用多种食谱之一。

  • 我正在尝试编写一个线程,该线程将在我的主程序的后台运行,并监视某些内容。在某个时候,主程序应该向线程发出安全退出的信号。下面是一个以固定间隔将本地时间写入命令行的最小示例。 当“on”变量没有通过引用传递时,此代码会编译并产生预期的结果,只是线程永远不会终止。一旦变量通过引用传递,我就会收到编译器错误 您能建议一种修复此代码的方法吗? 额外的问题:哪里出了问题,为什么它可以与std::ref一起工