切换为 goto 语句还是个案检查器?



switch 语句如何工作?它就像一个goto语句吗? 或 它是否适用于每个案例并验证哪个案例是正确的?然后执行真语句?

int month = 2;
int year = 2000;
int numDays = 0;
switch (month) {
case 1: case 3: case 5:
case 7: case 8: case 10:
case 12:
numDays = 31;
break;
case 4: case 6:
case 9: case 11:
numDays = 30;
break;
case 2:
if (((year % 4 == 0) && !(year % 100 == 0))|| (year % 400 == 0))
numDays = 29;
else
numDays = 28;
break;
default:
System.out.println("Invalid month.");
break;
}
System.out.println("Number of Days = " + numDays);
}

在代码中,我们可以看到在括号'(('内,我们给开关一个可变的月份。

我想知道用户是否输入 2 表示一个月,然后会发生什么。

它是直接跳转到案例 2 还是评估所有先前的案例,即(案例 1:案例 3:案例 5:案例 7:案例 8:案例 10:案例 12:案例 4:案例 6:案例 9:案例 11:(,然后找到案例 2 并执行它?

它有什么作用?

我认为答案是这取决于。 在这个特定示例中,将执行表切换,它将跳转到您要查找的特定情况。

有 2 个操作,switch 语句可以变成表开关和查找开关

这两者的区别可以在 JVM的LookupSwitch和TableSwitch的区别?

这也可以在预言机的规范中找到

https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-3.html#jvms-3.10

如果交换机的情况稀疏,则表表示形式为 表开关指令在空间方面变得低效。 可以改用查找开关指令。

最新更新