有人可以解释这种开关语句行为吗?



为什么会这样,

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的输入值的案例块?请注意,我知道我可以通过在 1 的 case 块中添加 break 语句来避免这种行为。

怎么可能输入案例块的输入值 2 当输入值明确为 1 时?

这种行为称为跌倒,这是初学者使用switch-case时常见的错误。实际上,case 1:确实首先执行。但是,由于案例 1 中没有break语句,因此您的switch-case将继续执行下一个案例,直到找到break语句。因此,它甚至会执行case 2:的代码,从而执行输出。然后它在执行case 2后中断,因为它遇到中断。

因此,将您的swich-case更改为:-

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

以查看预期行为。

因为你没有在案例 1 之后放置中断,所以它使用案例 2 的逻辑。您需要在每种情况下都有一个 break 语句,否则编译器将只转到下一行。

switch 语句

将贯穿所有案例块,直到到达 switch 语句的第一个中断或结尾。

因此,在您的情况下,它会执行所有块,直到到达第二个块的中断。

如果 "0" 和 "1" 块中有任何语句,这些语句也会被执行。

这种行为也非常有用。

最新更新