Java - 返回值是否会打破循环?

mar*_*ark 36 java boolean return while-loop singly-linked-list

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

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;
}
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Mar*_*ers 90

是*

是的,通常(在您的情况下)它会突破循环并从方法返回.

一个例外

一个例外是如果循环中有一个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.
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 即使 try 块内没有 return,你的逻辑最终也会被击中 (3认同)

Kei*_*all 19

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


Hob*_*ist 15

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

continue;
Run Code Online (Sandbox Code Playgroud)

因为似乎没有人建议它.


SJu*_*n76 10

是.

无论如何,对于这么短的问题,我认为你会更好(并得到一个更早的答案)只是自己尝试.

  • @duffymo但是一旦它在SO上,它有两个优点:1)查找其他人的速度更快,2)它可以说明边缘情况和进一步的话语. (12认同)