我不明白以下带有 break + 标签的 Java 片段的输出(就像其他语言中的 goto)

I don't understand the output of the following Java snippet with break + labels (like goto in other languages)

我不明白以下代码的输出:

public class testBreak
{

    public static void runTest()
    {
    high_level:
        {
            System.out.println("\nEnter in High Level");
        middle_level: 
            for(int i = 0; i < 4; i++)
            {
                System.out.println("Enter in Middle level cicle");
                int j = 0;
            low_level:  
                while(j++ < 2)
                {
                    System.out.println("Enter in Low level cicle");
                    System.out.println("i = " + i + ";j = " + j);
                    switch(i)
                    {
                        case 0 : break;
                        case 1 : break low_level;
                        case 2 : break middle_level;
                        case 3 : break high_level;
                    }
                    System.out.println("Exit from Low level cicle");
                }
                System.out.println("Exit from Middle level cicle");
            }
            System.out.println("Exit from High level cicle");
        }
    }
    
    public static void main(String args[])
    {
        runTest();
    }

}

这是输出:

Enter in High Level
Enter in Middle level cicle
Enter in Low level cicle
i = 0;j = 1
Exit from Low level cicle
Enter in Low level cicle
i = 0;j = 2
Exit from Low level cicle
Exit from Middle level cicle
Enter in Middle level cicle
Enter in Low level cicle
i = 1;j = 1
Exit from Middle level cicle
Enter in Middle level cicle
Enter in Low level cicle
i = 2;j = 1
Exit from High level cicle

我明白了 i = 1;j = 1 但为什么它会到达 Exit from Middle level cicle 而不是 Enter in low level cicle 因为我们有 j = 1 并且 while(j++ < 2) 应该取 1 < 2,然后将 j 增加到 2 并进入低级循环作为它在第一个 运行??

editet: 好像break with label 不等于goto,它跳出labeled 循环?并且循环在 C/C++ 中的代码中不是自由的,但它应用于该特定循环?

i = 1 时,您告诉它突破 low_level 标签。 low_level 下面的循环停止循环,然后打印 Exit from Middle level cicle。通过这样做,您然后在 middle_level 循环下方再次循环,这就是它然后打印 Enter in Middle level cicle.

的原因

摘自 Oracle 的 Java 教程:

The break statement terminates the labeled statement; it does not transfer the flow of control to the label. Control flow is transferred to the statement immediately following the labeled (terminated) statement.

这是否回答了您的问题?