Java - 返回一个值会打破循环吗?

50

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

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,还是一旦返回值就完成了方法?
谢谢。
5个回答

108

是的*

通常情况下(包括您的情况),是的,它会跳出循环并从方法返回。

异常情况

有一个例外,如果在循环内部有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.
    }
}

3
即使try块内没有返回,你的逻辑也会被困在finally中。 - divine

23

return语句会打破循环并立即从整个方法返回。在返回时,唯一执行的代码是finally子句的主体和释放任何synchronized语句。


18

我还应该补充一点,如果你想要在当前循环迭代过程中退出,立即开始下一个迭代过程,你可以使用:

continue;

似乎没有人提过这个建议。


@爱好者:请举一个例子,因为我不太明白你的回答。 - Ranjan Gupta

10

可以。

无论如何,对于这样简短的问题,我认为你最好自己尝试一下,以便更快地得到答案。


13
但是一旦它发布到了Stack Overflow上,就有两个好处:1)更快地为他人查找,2)阐明边缘案例并促进进一步的讨论。 - Joshua Pinter
@JoshPinter 这也是QA的一个好选择,您可以自己提供答案。 - cst1992
@cst1992 过去的日子我一直在这么做,但最近开始收到负评,因为有人说:“好的,你解决了问题,然后呢?”。 - Al-Mothafar

2

当调用退出一个方法并向调用者返回一个值时,会使用Return语句。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接