Java:无限循环公约

Jus*_*tin 39 java conventions infinite-loop

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

Psh*_*emo 79

有一个在字节码之间没有差异while(true)for(;;),但我更喜欢while(true),因为它是减少混乱(特别是对于一个新到Java).

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

void test1(){
    for (;;){
        System.out.println("hello");
    }
}
void test2(){
    while(true){
        System.out.println("world");
    }
}
Run Code Online (Sandbox Code Playgroud)

当你使用命令时,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
Run Code Online (Sandbox Code Playgroud)

它显示相同的结构("hello"vs"world"字符串除外).

  • +1:用于解释 (10认同)
  • 我认为是时候让 Java 想出一个无限循环结构,这样我们就不需要像其他语言那样的变通办法了。我可以建议在不需要 `while` 的情况下使用 `do {}`,或者简单地使用 `loop {}`。 (2认同)

06n*_*amt 13

我更喜欢while(true),因为我使用while循环的次数少于循环.For循环有更好的用途,while(true)更清晰,易读for(;;)

  • @Aubin OTOH,`for(;;)`在打高尔夫球时更加愉快 (5认同)
  • @Aubin,`for`的中间部分也可以!只需将其粘贴在`for(; condition(););`中.使用`for`也意味着你可以在两个semicola中的第二个之后轻松添加一个变量来计算循环的迭代(或其他'迭代'之间的东西). (3认同)

The*_*ook 7

由你决定.我认为这样的事情没有惯例.你可以使用while(true)for(;;)

我会说我while(true)在源代码中经常遇到.for(;;)不经常使用和更难阅读.


Fra*_*fka 6

for(;;)糟透了,新手阅读完全不直观。请while(true)改用。


bla*_*her 5

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

然而,while(true)由于它更容易理解,所以使用得更频繁。