int z = 5, x = 44;
switch (x)
{
case 45:
z = z + 15;
break;
case 46:
z = z - 5;
break;
default:
z = z * 3;
}
Switch
语句可以被认为是某种特殊的 If
语句。有一件小事。如果case body没有包含一个 break
语句,然后继续检查case。
至于 default case
,当没有其他情况检查为真时,就会被击中。
也就是说,你的switch语句可以写成。
if(x == 45)
{
z = z + 15;
} else if(x == 46)
{
z = z - 5;
} else
{
z = z * 3;
}
很明显,当给定x和z的值44和5时,z的值会是什么。
而且,没有break语句的case体是ifs没有els。
if(x == 45)
{
z = z + 15;
}
if(x == 46)
{
z = z - 5;
}
z = z * 3;
所以当你运行一个没有break语句的switch时,所有的case都会被击中。
为了进一步检查,请考虑这段代码。
if(x == 44)
{
z = z / 5;
x = x + 1;
} else if(x == 45)
{
z = z + 15;
x = x + 1;
} else if(x == 46)
{
z = z - 5;
x = x + 1;
} else
{
z = z * 3;
}
还有这段代码
if(x == 44)
{
z = z / 5;
x = x + 1;
}
if(x == 45)
{
z = z + 15;
x = x + 1;
}
if(x == 46)
{
z = z - 5;
x = x + 1;
}
z = z * 3;
同样的给定值x=44和z=5。正如你所看到的,我实际上是将 x = x + 1;
同声传译 switch on x
一样 case
s和一种新的情况,在所有的情况下,在z赋值后,有和没有 break
s. 在第一个例子中,z值为1,甚至x值也被递增到等于45;但是检查停止了,因为它从来没有到过 else块。但在第二个例子中,所有的块都被击中,z值产生等于33。