许多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语句快。但我没有找到任何地方为什么切换比现在更快。示例我有一个情况,我必须选择...
因为在很多情况下,有一些特殊的字节码可以有效地评估switch语句。
switch
语句并不总是比if
语句快。它的伸缩性比一长串的if-else
语句更好,因为switch
可以基于所有值执行查找。但是,对于短期情况,它不会更快,并且可能会更慢。
当前的JVM具有两种开关字节代码:LookupSwitch和TableSwitch。
因此,如果您打算承载大量数据包,那么这些天内存并不是真正的大笔费用,并且阵列速度非常快。您也不能依靠switch语句自动生成跳转表,因此,自己生成跳转表方案会更容易。如您在以下示例中看到的,我们假设最大值为255包。
在字节码级别,主题变量仅从Runtime加载的结构化.class文件中的内存地址加载一次到处理器寄存器中,并且位于switch语句中;在if语句中,代码编译DE会生成不同的jvm指令,这要求将每个变量都加载到寄存器中,尽管与下一个if语句中使用的变量相同。如果您知道使用汇编语言进行编码,那么这将很常见。尽管java编译的cox不是字节码或直接的机器代码,但其条件概念仍然一致。好吧,我试图避免在解释时加深技术性。我希望我已经使这个概念变得清晰和神秘。谢谢。