奇怪" for(;;)" Java中的无限循环,这有用吗?

时间:2015-05-08 13:38:39

标签: java loops for-loop infinite-loop

虽然我有一些Java经验,但下面的代码对我来说有点奇怪:

public class ForLoopTest{
    public static void main(String[] args){
        for(;;){}
    } 
}

这段代码编译得很好,虽然初始化测试增量部分是空的,不像通常的for循环:

for(int i=0; i<10; i++){}

由于代码编译得很好,因此它的语法有效。

这种类型的for循环是否有实际用途,没有初始化测试增量部分?

7 个答案:

答案 0 :(得分:12)

相当于while(true) {}

没有真正的理由使用或不使用for循环(并且通常也不会写while(true)循环。)

答案 1 :(得分:9)

这是编写无限循环的一种方法。它相当于:

while(true){ }

或者:

boolean loop = true;
while (loop) {
    //do nothing
}

甚至:

int theAnswerToTheQuestionOfLifeTheUniverseAndEverything = 42;
while(theAnswerToTheQuestionOfLifeTheUniverseAndEverything == 42) { 
    //do nothing
} 

答案 2 :(得分:7)

这是一个无限循环。你可以使用它的方式(没有无限循环)就像这样(你可能永远不会用这种方式):

int i = 0;
for(;;) {
  if(i == 10) { 
      break;
  }
  i++;
}

答案 3 :(得分:4)

您的循环for(;;){}相当于while(true) {} 是的,这是一个无限循环

如果您的问题是:有任何理由使用它吗? 答案是也许是

我给你举个例子:

如果您想要一个不时读取测量值的程序怎么办? 就像一台显示器,显示一个dron录音或类似的东西?

您可能需要这样的循环来刷新图像。

但是,通常你不需要这样做。

答案 4 :(得分:2)

Kayaman是对的。该格式的循环需要在其中具有一些退出条件,否则它无疑将是一个无限循环。大多数人在这种情况下使用while(true),因为它更容易理解。我有一位教授曾经告诉我,for(;;) {}的唯一优势是它看起来比while(true)更令人印象深刻。

答案 5 :(得分:2)

正如卡亚曼也提到它相当于while(true) {}

我能想到的一个用例是 - 如果您需要在信号量文件到达目录后立即执行某些操作。你可以继续检查文件到达的无限循环,一旦文件到达然后做一些操作并打破循环

答案 6 :(得分:2)

for(;;)相当于while(true)。您在代码中经常看到前者的原因是,它是在C编程语言中编码无限循环的规范方式,Java从中借用了大量的语法元素,这是许多语法的背景。 Java开发人员。

使用while(true)可能看起来更直截了当,但C编程语言在开头没有布尔类型,也没有true字面值,因此等效值必须为{{1}然后,这看起来不比while(1)好。它帮助后者成为一种常见的模式,因为它被K&amp; R(见this answer)指定为永恒循环的习语。

好吧,改变编程语言并不一定意味着改变习惯,所以你现在看到Java中的for(;;)几乎和C一样频繁。