44

Java中无限循环的约定是什么?我应该写while(true)还是for(;;)?我个人会使用while(true),因为我较少使用 while 循环。

4

5 回答 5

83

和之间的字节码没有区别,while(true)for(;;)我更喜欢while(true)它,因为它不那么令人困惑(尤其是对于刚接触 Java 的人)。

您可以使用此代码示例进行检查

void test1(){
    for (;;){
        System.out.println("hello");
    }
}
void test2(){
    while(true){
        System.out.println("world");
    }
}

当你使用命令时javap -c ClassWithThoseMethods,你会得到

  void test1();
    Code:
       0: getstatic     #15                 // Field java/lang/System.out:Ljava/io/PrintStream;
       3: ldc           #21                 // String hello
       5: invokevirtual #23                 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
       8: goto          0

  void test2();
    Code:
       0: getstatic     #15                 // Field java/lang/System.out:Ljava/io/PrintStream;
       3: ldc           #31                 // String world
       5: invokevirtual #23                 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
       8: goto          0

它显示了相同的结构(“hello”与“world”字符串除外)。

于 2013-04-13T15:48:25.757 回答
15

我更喜欢while(true),因为我使用 while 循环的频率低于 for 循环。For 循环有更好的用途,并且while(true)for(;;)

于 2013-04-13T15:46:58.907 回答
9

由你决定。我不认为有这样的约定。您可以使用while(true)for(;;)

我会说我while(true)在源代码中经常遇到。for(;;)较少使用且较难阅读。

于 2013-04-13T15:47:12.353 回答
6

for(;;)糟透了,对于新手来说阅读是完全不直观的。请while(true)改用。

于 2013-04-13T15:50:55.080 回答
5

最终,这是您的选择。Java 教程同时展示了forwhile

但是,while(true)由于它更易于理解,因此更经常使用。

于 2013-04-13T15:48:25.040 回答