为什么这个循环不是无限的?

3

请问有人能为我指明正确的IT技术问题解决路径吗?

为什么在下面的代码中,开始消息和结束消息之间会有一秒钟的间隔?

System.out.println("Start:" + LocalTime.now());
for (int i = 0; i > -1; i++) { /*Infinite loop*/ }
System.out.println("End  :" + LocalTime.now());

我试图找出DCE是否需要花费时间来处理这种类型的代码,但没有找到太多有用信息。


9
这个循环不是无限的。它将一直循环,直到 i 溢出并最终变为 -1。 - marstran
6
你在问什么?让 int 溢出只需要一秒钟时间 - 那 24 亿次迭代需要时间。换句话说,你的循环不是无限的,只是很长而已。 - Boris the Spider
3
请注意,你的测量方式有点“失效”,因为它衡量的是打印第一个文本所需的时间。打印可能需要很长时间,可能比你测量的其余代码还要长。因此,它可能会主导测量结果,导致你得到错误的印象。因此,在你的测量中包括打印时间。另外,LocalTime.now() 对于测量持续时间来说不是很好,因为它会漂移。使用 System.nanoTime() 并求差值。 - Zabuzard
2
@marstran它不会变成-1,而是在达到-2147483648之前就打破了循环...我认为你的意思是小于-1。 - devm
1
请将以下与编程有关的内容从英语翻译成中文。仅返回翻译后的文本:(在这种情况下,有一些重复的问题可以在此处找到here, herehere (closest) - user202729
显示剩余6条评论
1个回答

6

你已经将“i”定义为int类型,其范围从-2,147,483,648到2,147,483,647。当它达到-2147483648(您的代码从0开始循环并递增1)时,条件变为false,循环就会停止。

    int i;
    System.out.println("Start: " + LocalTime.now());
    for (i = 0; i > -1; i++) { /*Infinite loop*/ }
    System.out.println("End  :" + LocalTime.now());
    System.out.println("i  :" + i);

尝试上述方法,您会发现最终的值为-2147483648,因此跳出了循环。

i 循环从 0 到 2,147,483,647。 - Thiyagu
好的...我应该提到范围。已编辑! - devm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接