在 Java 中使用 break 退出循环是不是不好的做法?[已关闭]

2022-08-31 12:20:04

我想知道使用语句退出循环而不是满足循环条件是否是一种“不良做法”?break

我对Java和JVM没有足够的洞察力来了解如何处理循环,所以我想知道这样做是否忽略了一些关键的东西。

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


答案 1

好领主不。有时,在满足总体要求的循环中可能会发生某些事情,而不满足逻辑循环条件。在这种情况下,使用,以阻止您毫无意义地绕着循环循环。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,即使你已经找到了它,还是循环直到你找到项目并停止?或者把它放到现实世界中;当你找到你的钥匙,你继续寻找吗?

编辑以响应评论

为什么不设置为打破循环?这是毫无意义的。我们有!除非您的代码所做的假设肯定比以后更大(并且可能不应该),否则您只需使用 .x11breakx10break

为了完整性而编辑

肯定还有其他方法来模拟 。例如,在循环中的终止条件中添加额外的逻辑。说它要么是毫无意义的循环,要么是使用是不公平的。如前所述,while 循环通常可以实现类似的功能。例如,按照上面的示例。。breakbreak

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

    x++;
}

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

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"))

答案 2

使用 ,就像几乎任何其他语言功能一样,在特定上下文中,您显然滥用了它,这可能是一种不好的做法。但是一些非常重要的习语不能在没有它的情况下编码,或者至少会导致可读性大大降低的代码。在这些情况下,是要走的路。breakbreak

換句話說,不要聽從任何一概而論的、無條件的建議——關於或其他任何事情。我没有一次看到代码完全消瘦,只是为了从字面上强制执行“好做法”。break

关于您对性能开销的担忧,绝对没有。在字节码级别,无论如何都没有显式循环构造:所有流控制都是根据条件跳转实现的。


推荐