为什么会这样,
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
语句来避免此行为。
答案 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”块中有任何语句,这些语句也会被执行。
这种行为也非常有用。