学习Java中的Switch语句

学习Java中的Switch语句,java,Java,我是Java新手,正在学习switch语句。但是,似乎匹配了错误的情况(情况“二”)。我怀疑这是因为缺少break在case“one”之后,但是有人能给我解释一下Java switch语句背后的逻辑吗?当值甚至不匹配时,案例“two”为什么会匹配 这是我的密码: String a = "one"; switch(a) { case "one": System.out.println("a is one"); case "two": System.out.println("a is

我是Java新手,正在学习switch语句。但是,似乎匹配了错误的情况(
情况“二”
)。我怀疑这是因为缺少
break
case“one”
之后,但是有人能给我解释一下Java switch语句背后的逻辑吗?当值甚至不匹配时,
案例“two”
为什么会匹配

这是我的密码:

String a = "one";
switch(a) {
    case "one": System.out.println("a is one");
    case "two": System.out.println("a is two");
    default: System.out.println("numbers");
}
我预期产出:

a是一个
数字

但是得到:

a是一个
a是两个
数字


你需要休息一下

    String a = "one";
    switch(a) {
        case "one": System.out.println("a is one"); break;
        case "two": System.out.println("a is two"); break;
        default: //
    }
    System.out.println("numbers")

然后,可能会在后面打印数字。case语句从上到下进行计算,当它找到匹配项时,将在该点输入并向下继续,直到找到一个断点(或者它在没有找到匹配项的情况下到达底部)。您不能进入“一”,跳过“二”,然后重新输入默认值


当上面的所有其他情况都不匹配时,将使用默认值

每个break语句终止封闭的switch语句。控制流继续执行开关块后面的第一条语句。break语句是必需的,因为如果没有它们,开关块中的语句就会失效:匹配的case标签之后的所有语句都会按顺序执行,而不管后续case标签的表达式如何,直到遇到break语句为止

如果所有案例都已检查且未通过,则将执行默认案例。因此,在您的情况下,代码应该是这样的

String a = "one";
switch(a) {

    case "one":
        System.out.println("a is one");
        break;

    case "two": 
        System.out.println("a is two");
        break

    default: 
        System.out.println("None of the cases matched ");
}

System.out.println("numbers");

switch
语句中,将表达式的值与
case
语句中的每个文本值进行比较。如果找到匹配,则执行
案例
后面的代码序列。但是,默认语句是可选的。
break
语句在
开关中用于终止语句序列。
当遇到
break
语句时,执行分支到整个
switch
语句后面的第一个代码。 这具有跳出开关的效果。
如果省略
中断
执行将继续到下一个案例

默认值
预计不会在底部(据我所知)。