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
语句不是块(就语言而言),它们只是开关块内的标签。