有人可以解释这个switch语句的行为吗?

时间:2013-01-28 16:33:14

标签: 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");
                break;
            default:
                break;
        }
    }
}

输出这个,

  

案例2正在执行

当输入值明确为2时,如何为输入值1输入大小写块?请注意,我知道我可以通过在case块中为1添加break语句来避免此行为。

3 个答案:

答案 0 :(得分:9)

  

如何为输入值输入大小写块   2当输入值明确为1?

这种行为称为 fall-through ,这对于使用switch-case的初学者来说是一个很常见的错误。实际上,case 1:确实先执行。但是,由于 case 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 :(得分:1)

因为你没有在案例1之后休息所以它使用案例2的逻辑。在每个案例之后你需要一个break语句,否则编译器就会转到下一行。

答案 2 :(得分:1)

switch语句将遍历所有case块,直到它到达第一个break或switch语句的结尾。

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

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

这种行为也非常有用。