【问题标题】:Why this loop is not infinite [duplicate]为什么这个循环不是无限的[重复]
【发布时间】:2018-08-18 14:31:20
【问题描述】:

有人可以指导我正确的道路

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

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

我试图找出 DCE 是否需要时间来处理这种类型的代码,但找不到太多。

【问题讨论】:

  • 那个循环不是无限的。它将循环直到i 溢出并最终变为-1。
  • 你在问什么?溢出int 需要一秒钟——这 24 亿次迭代需要时间。换句话说,你的循环不是无限的——它只是很长。
  • 死代码消除从何而来?
  • 另请注意,您的测量有点损坏,因为它测量的是打印第一个文本需要多长时间。打印需要很长时间,可能比您测量的其余代码更长。那样的话,它可能会主导测量,而由此产生的时间会给你留下错误的印象。因此,在您的测量中包括打印。此外,LocalTime.now() 不适合测量持续时间,因为它漂移。使用System.nanoTime() 并获取差异。
  • @marstran 它不会变为 -1,而是在 -2147483648 处打破循环......在达到 -1 之前......我认为你的意思是小于 -1

标签: java


【解决方案1】:

正如您已将“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
  • 对...我应该提到范围。已编辑!
猜你喜欢
  • 1970-01-01
  • 2018-03-17
  • 2021-08-16
  • 2018-01-13
  • 1970-01-01
  • 1970-01-01
  • 2020-08-08
相关资源
最近更新 更多