Java - 返回值是不是会破坏循环?

Posted

技术标签:

【中文标题】Java - 返回值是不是会破坏循环?【英文标题】:Java - Does returning a value break a loop?Java - 返回值是否会破坏循环? 【发布时间】:2012-05-26 12:38:41 【问题描述】:

我正在编写一些基本上遵循以下格式的代码:

public static boolean isIncluded(E element) 
    Node<E> c = head;
    while (c != null) 
        if (cursor.getElement().equals(element)) 
            return true;
        
        c = c.getNext();
    
    return false;

代码将在节点列表中搜索元素。但是,我的问题是,如果 while 循环确实找到了 if 语句说它应该返回 true 的元素,它会简单地返回 true 并中断循环吗?此外,如果它确实打破了循环,它会继续执行该方法并仍然返回false,还是一旦返回值,该方法是否完成?

谢谢

【问题讨论】:

【参考方案1】:

是*

是的,通常(在你的情况下)它确实会跳出循环并从方法返回。

异常

一个例外是,如果循环内有一个 finally 块并围绕 return 语句,那么 finally 块中的代码将在方法返回之前执行。 finally 块可能不会终止 - 例如,它可能包含另一个循环或调用永远不会返回的方法。在这种情况下,您永远不会退出循环或方法。

while (true)

    try
    
        return;  // This return technically speaking doesn't exit the loop.
    
    finally
    
        while (true)   // Instead it gets stuck here.
    

【讨论】:

即使在try块中没有return,你的逻辑最终也会被击中【参考方案2】:

Return 确实会中断循环并立即从整个方法返回。唯一会在退出时执行的代码是finally 子句的主体和任何synchronized 语句的释放。

【讨论】:

【参考方案3】:

我还要补充一点,如果你想打破循环的当前迭代,并立即开始下一个循环,你可以使用:

continue;

似乎没有人建议它。

【讨论】:

@hobbyist : 请举一个例子,因为我不清楚你的答案。【参考方案4】:

是的。

无论如何,对于这么短的问题,我认为您自己尝试会更好(并获得更早的答案)。

【讨论】:

@duffymo 但是一旦它在 SO 上,它有两个优点:1)它可以更快地查找其他人,2)它阐明了边缘情况和进一步的讨论。 @JoshPinter 这也是一个很好的 QA 候选人,你自己提供答案。 @cst1992 前一天我在做,但最近我开始对此投反对票,因为人们说“好吧,如果你解决了现在问题是什么?”所以...【参考方案5】:

当被调用时从任何地方退出一个方法并返回一个值给调用者时返回。

【讨论】:

以上是关于Java - 返回值是不是会破坏循环?的主要内容,如果未能解决你的问题,请参考以下文章

函数返回值是不是是自动对象并因此保证被破坏?

从 Java 8 forEach 循环返回一个值

java for循环 判断条件为空时 构造方法为啥不需要返回值

java 循环变量

Qt exec()的返回值是多少啊

如何在不破坏遗留代码的情况下增加函数的返回值?