Java 有人能解释这个switch语句的行为吗?

Java 有人能解释这个switch语句的行为吗?,java,switch-statement,Java,Switch Statement,为什么会这样, public class Bar { public static void main(String[] args) { int i = 1; switch(i) { case 0: case 1: case 2: System.out.println("Case 2 being executed");

为什么会这样,

public class Bar 
{
    public static void main(String[] args) 
    {
        int i = 1;

        switch(i)
        {
            case 0:
            case 1:
            case 2:
                System.out.println("Case 2 being executed");
                break;
            default:
                break;
        }
    }
}
输出这个,

案件2正在执行中

?

当输入值显式为
1
时,如何为
2
的输入值输入case块?注意,我知道我可以通过在1的case块中添加
break
语句来避免这种行为

如何输入输入值为的case块 2当输入值显式为1时

这种行为称为跌落,这是初学者在使用开关盒时经常犯的错误。实际上,
案例1:
首先执行。但是,由于案例1中没有
break
语句,因此您的
开关案例将继续执行下一个案例,直到找到
break
语句。因此,它甚至会执行
情况2:
的代码,并因此执行输出。然后在执行案例2后,当遇到中断时,它会中断

因此,将您的
开关盒更改为:-

switch(i)
{
        case 0: break;
        case 1: break;
        case 2:
            System.out.println("Case 2 being executed");
            break;
        default:
            break;
}

查看预期行为。

因为您没有在案例1后加上中断符,所以它使用案例2的逻辑。在每种情况下都需要一个break语句,否则编译器将直接进入下一行

switch语句将在所有case块中运行,直到到达switch语句的第一个break或结尾

因此,在您的例子中,它执行所有块,直到它到达第二个块中的断点

如果“0”和“1”块中有任何语句,也将执行这些语句


这种行为也非常有用。

它被称为
fall-through
。因为。。。这就是
开关的工作原理?注意第二个例子。仅供参考
case
语句不是块(就语言而言),它们只是开关块内的标签。