为什么切换比如果快

问题描述 投票:106回答:5

许多Java书籍将switch语句描述为比if else语句快。但我没有发现任何地方为什么切换比if更快]。

示例

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

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

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

考虑项目,BREAD是一个恒定的int值。

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

许多Java书籍将switch语句描述为比if else语句快。但我没有找到任何地方为什么切换比现在更快。示例我有一个情况,我必须选择...

java switch-statement
5个回答
102
投票

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


31
投票

switch语句并不总是比if语句快。它的伸缩性比一长串的if-else语句更好,因为switch可以基于所有值执行查找。但是,对于短期情况,它不会更快,并且可能会更慢。


7
投票

当前的JVM具有两种开关字节代码:LookupSwitch和TableSwitch。


1
投票

因此,如果您打算承载大量数据包,那么这些天内存并不是真正的大笔费用,并且阵列速度非常快。您也不能依靠switch语句自动生成跳转表,因此,自己生成跳转表方案会更容易。如您在以下示例中看到的,我们假设最大值为255包。


0
投票

在字节码级别,主题变量仅从Runtime加载的结构化.class文件中的内存地址加载一次到处理器寄存器中,并且位于switch语句中;在if语句中,代码编译DE会生成不同的jvm指令,这要求将每个变量都加载到寄存器中,尽管与下一个if语句中使用的变量相同。如果您知道使用汇编语言进行编码,那么这将很常见。尽管java编译的cox不是字节码或直接的机器代码,但其条件概念仍然一致。好吧,我试图避免在解释时加深技术性。我希望我已经使这个概念变得清晰和神秘。谢谢。

© www.soinside.com 2019 - 2024. All rights reserved.