在Java中使用break来退出循环是不好的做法吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (16)

我想知道使用break语句来退出循环而不是实现循环条件是否是一个“坏习惯” ?

我对Java和JVM没有足够的了解来了解如何处理循环,因此我想知道是否因为这样做而忽略了一些重要的事情。

这个问题的重点是:是否存在特定的性能开销?

提问于
用户回答回答于

好主没有。有时候,在满足整体需求的环路中可能会出现某些情况,而不满足逻辑环路条件。在这种情况下,break可以用来阻止你毫无意义地在一个循环中循环。

String item;

for(int x = 0; x < 10; x++)
{
    // Linear search.
    if(array[x].equals("Item I am looking for"))
    {
       //you've found the item. Let's stop.
       item = array[x];
       break; 
    }
}

在这个例子中更有意义。每次都继续循环到10次,即使在找到它之后,或者循环到找到该项目并停止为止?或者把它变成现实世界的术语; 当你找到你的钥匙时,你继续找?

为什么不设置x11打破循环?没有用。我们有break!除非你的代码做出了x10以后更大的假设(并且它可能不应该是这样),那么你就可以使用break

肯定有其他的方法来模拟break。例如,在循环中为您的终止条件添加额外的逻辑。说它是循环无意义或使用break是不公平的。正如所指出的,while循环通常可以实现类似的功能。例如,按照上面的例子..

while(x < 10 && item == null)
{
    if(array[x].equals("Item I am looking for"))
    {
        item = array[x];
    }

    x++;
}

break简单使用意味着您可以通过for循环来实现此功能。这也意味着,无论何时您希望循环的行为不同时,您都不必在条件中添加终止逻辑。例如。

for(int x = 0; x < 10; x++)
{
   if(array[x].equals("Something that will make me want to cancel"))
   {
       break;
   }
   else if(array[x].equals("Something else that will make me want to cancel"))
   {
       break;
   }
   else if(array[x].equals("This is what I want"))
   {
       item = array[x];
   }
}

而不是一个while loop看起来像这样的终止条件:

while(x < 10 && !array[x].equals("Something that will make me want to cancel") && 
                !array[x].equals("Something else that will make me want to cancel"))
用户回答回答于

使用break,就像几乎任何其他语言功能,可以是一个不好的做法,特定的环境,在这里你都清楚地滥用其内。但是一些非常重要的成语不能在没有它的情况下进行编码,或者至少会导致更少的可读代码。在这些情况下,break是要走的路。

换句话说,不要听任何一揽子,不合格的建议 - 关于break或其他任何事情。我从来没有看到完全消瘦的代码只是为了强制执行“良好实践”。

关于对性能开销的关注,绝对没有。在字节码级别,无论如何都没有显式的循环结构:所有的流量控制都是通过条件跳转来实现的。

扫码关注云+社区