【问题标题】:How could the following Java library code ever exit the while(true) loop?下面的 Java 库代码怎么会退出 while(true) 循环?
【发布时间】:2011-04-26 21:24:50
【问题描述】:

我正在查看 TimSort java 代码:Original Source 特别是 mergeLo 函数的第 676 到 739 行。它(大致)具有以下布局:

outer:
    while (true) {
        //Code here
        break outer; //Code within a few if tests in the loop.
    }
    //Code here executes somehow.

我对这个函数如何停止运行感到困惑,因为唯一的 break 语句会转到外部块(然后应该退回到 while(true),并且没有 return 语句。

我的问题是,当我尝试对 184 个或更多元素进行排序时,第 747 行正在执行并引发异常,我想弄清楚如何解决它,任何帮助将不胜感激。

[注意]:这是部署在Android手机上的Java的collections.sort方法调用的函数。

【问题讨论】:

    标签: java logic while-loop


    【解决方案1】:

    标签“外部”只是 while 循环的别名。也就是说,break 语句中断循环,控制流在循环之后继续。

    相比之下,continue outer 会返回到 while 循环的顶部。

    【讨论】:

      【解决方案2】:

      outer 实际上是标记while 循环,而不是它之前的行,所以它不会在中断后重新进入......它不是goto。 =)

      【讨论】:

        【解决方案3】:

        break outer; 使您离开while(true) 循环。它不会回到循环中。您是否将breakcontinue 混淆了?

        【讨论】:

          【解决方案4】:

          你应该看看syntax of break statements

          我认为您将break 语句视为goto 语句。他们是两个不同的东西。带有包含标签的 break 语句从标签指向的语句中分出。

          链接应该很有用。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-06-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多