java switch语句机制

MUH*_*AIN 0 java switch-statement

在下面的代码中,当我评论休息时,当我写一个案例(说"开始")它将打印下面输出的所有案例,意味着所有三行都打印,当我写"停止"它打印两个输出"机械停止"和"没有给出命令",为什么我需要在编译器搜索案例时给出break语句,如果匹配则打印相关输出.

    import java.util.Scanner;
    public class App{
    public static void main(String args[]){
    Scanner input = new Scanner(System.in);
    String text = input.nextLine();
    switch(text){
        case "start":
        System.out.println("Mechine Started");
        break;
        case "stop":
        System.out.println("Mechine stopped");
        break;
        default:
        System.out.println("No command given");


            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

Bri*_*new 6

为什么我需要在编译器搜索案例时给出break语句,如果匹配则打印相关输出.

因为它是如何定义的.除非您明确说明,否则您的程序将覆盖其余的案例条款break

参见JLS第14.11节并注意:

如果其中一个case常量等于表达式的值,那么我们说case匹配,并且switch块中匹配case标签之后的所有语句(如果有的话)按顺序执行.

它类似于C中的开关行为,注意.来自维基百科:

从C派生的语言,更常见的是受Fortran的计算GOTO影响的语言,而不是特征性的,其中控制移动到匹配的情况,然后执行继续("落后")到与源文本中的下一个案例相关联的语句