【问题标题】:Is an endless loop realy goes on endlessly in java? [duplicate]无限循环真的在java中无限循环吗? [复制]
【发布时间】:2021-07-23 16:20:40
【问题描述】:

我的问题是,如果有代码,

class loop
{
   public static void main()
   {
      for (int i=0; ; i++)
      {
         System.out.println(i)
      }
   }
}

整数变量 i 的最大值为 2147483647(根据 google),那么代码会运行 2147483647 次吗?如果是这样,那么它不会是一个无限循环。

谁能回答我的问题?

【问题讨论】:

  • 你真的试过运行代码吗?这通常是确定行为的最佳方式。我想象会发生的是整数会溢出(而不是抛出达到最大值的异常)。
  • 你试过了吗?也许是byte
  • 我也无法理解为什么这个问题,显然是可测试的和重复的,被多次投票,而有很多很好的答案却被否决。
  • 这个残酷的世界真的有无穷无尽的东西吗?您的程序将停止工作。不管怎样。但它会停止。也许是因为它自然而然地结束了。也许是因为 JVM 有错误,也许它停止了,也许运行它的 VM 被终止,也许它遇到了电源问题。在这个残酷的世界里,没有什么,没有真的是无穷无尽的。由您决定您的程序将运行多长时间。但是,我的朋友,它会停止。不管你愿不愿意。
  • 真正无限的无限循环:while (true) { System.out.println("infinite"); }

标签: java loops variables infinite-loop


【解决方案1】:

想一想当 int 已经达到最大值时会发生什么:

public static void main(String[] args) {
    int x = 2147483647;
    x++;
    System.out.println(x); // -2147483648
}

它不会出错,它只会滚动到负数。所以,回答你的问题,是的,它将永远运行(或直到程序因某些外部因素而终止)

【讨论】:

  • 好的先生,谢谢您的回答。
【解决方案2】:

它永远是一个无限循环,因为你没有条件:

for (int i=0; ; i++)

在 2147483647 之后显示的值将是负值。

【讨论】:

  • 无条件不一定意味着无限循环。在这样的循环中,您可以中断、调用函数、抛出异常等。但是在这种情况下,整数将在达到最大值后翻转。
  • 是的,没错。我是为了这个特定的循环
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-13
  • 1970-01-01
  • 2021-06-03
  • 2014-03-29
  • 1970-01-01
  • 2012-01-24
相关资源
最近更新 更多