为什么切换速度比 if 更快

2022-08-31 08:23:32

许多Java书籍都描述该语句比该语句更快。但我没有在任何地方发现为什么开关比如果更快switchif else

我有一个情况,我必须从两个项目中选择任何一个项目。我可以使用任何一种使用

switch (item) {
    case BREAD:
        //eat Bread
        break;
    default:
        //leave the restaurant
}

if (item == BREAD) {
    //eat Bread
} else {
    //leave the restaurant
}

考虑项目和 BREAD 是一个常数 int 值。

在上面的例子中,哪个动作更快,为什么?


答案 1

因为有特殊的字节码可以在很多情况下有效地评估switch语句。

如果使用 IF 语句实现,您将有一个检查,一个跳转到下一个子句,一个检查,一个跳转到下一个子句等等。使用交换机,JVM 加载要比较的值,并循环访问值表以查找匹配项,这在大多数情况下更快。


答案 2

语句并不总是比语句快。它比一长串语句缩放得更好,因为它可以基于所有值执行查找。但是,对于短期条件,它不会更快,并且可能会更慢。switchifif-elseswitch