这个问题在这里已有答案:
我无法理解switch语句的工作原理。下面的代码甚至可以使用a的值为4.我理解switch语句中的每个case都不是具有自己的局部作用域的块,但这是否意味着变量x被声明为甚至a不等于2?
int a = 2;
switch(a){
case 2:
int x = 4;
case 3:
x = 5;
case 4:
x = 7;
}
情况1
int a = 2;
switch(a){
case 2:
int x = 4;
// executes
case 3:
x = 5;
// executes
case 4:
x = 7;
// executes
}
在这个value of x will be 7 because the switch won't break
,如果它找到匹配的情况。
案例2
如果要在2上停止执行,请执行以下操作
int a = 2;
switch(a){
case 2:
int x = 4; // variable declaration works even if case wont match. Validity inside switch for every line of code after this line
break;
// executes and break
case 3:
x = 5;
break;
// executes and break
case 4:
x = 7;
break;
// executes and break
default:
// write default case here
}
由于整个范围内的声明范围,您无需在每个x中使用int
。
交换机中变量声明的范围将影响交换机中的以下语句或代码行。这是因为,如果变量声明它将在大括号中定义范围。
案例3
int a = 3;
switch(a){
case 2:
{
int x = 4;
break; // u can skip this break to. Then also it will throw error.
// x is local variable inside this braces
}
// executes
case 3:
x = 5;
// error
case 4:
x = 7;
// error
System.out.println(""+x);
}
在上述情况下,它将通过错误。因为它的范围只是在那种情况下。在这种情况下,变量的范围在大括号内声明。所以在括号之外,x将不起作用。因为在这种情况下x是局部变量。