虽然我有一些Java经验,但下面的代码对我来说有点奇怪:
public class ForLoopTest{
public static void main(String[] args){
for(;;){}
}
}
这段代码编译得很好,虽然初始化测试增量部分是空的,不像通常的for循环:
for(int i=0; i<10; i++){}
由于代码编译得很好,因此它的语法有效。
这种类型的for循环是否有实际用途,没有初始化测试增量部分?
答案 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一样频繁。