44

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

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,还是一旦返回值,该方法是否完成?

谢谢

4

5 回答 5

103

是的*

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

一个例外

一个例外是,如果循环内有 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.
    }
}
于 2012-05-18T23:48:21.537 回答
22

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

于 2012-05-18T23:48:11.400 回答
17

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

continue;

似乎没有人建议它。

于 2014-12-31T20:05:20.300 回答
11

是的。

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

于 2012-05-18T23:48:24.060 回答
2

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

于 2012-05-18T23:55:09.427 回答