【问题标题】: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,还是一旦返回值,该方法是否完成?

谢谢

【问题讨论】:

    标签: java while-loop boolean return singly-linked-list


    【解决方案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】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-06-23
        • 2016-09-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多