为什么开关比如果更快
我在java中发现很多书,switch语句比if语句更快。 但我没有找到antwhere说为什么开关比如果更快 。
例
我有一种情况,我必须选择两个中的任何一个,我可以使用以下任何一种方式
switch(item){
case BREAD:
//eat Bread
break;
default:
//leave the restaurant
}
或者使用if语句如下
if(item== BREAD){
//eat Bread
}else{
//leave the restaurant
}
考虑项目和BREAD是不变的整数值
在上面的例子中,行动更快,为什么?
因为有很多特殊的字节码可以在有很多情况下进行有效的开关语句评估。
如果使用IF语句实现,您将有一个支票,一个跳到下一个条款,一个支票,一个跳到下一个条款等等。 通过交换机,JVM加载要比较的值并迭代整个值表以查找匹配项,这在大多数情况下更快。
switch
语句并不总是比if
语句更快。 它比if-else
语句的长表更好,因为switch
可以根据所有值执行查找。 但是,对于一个短的情况,它不会更快,可能会更慢。
在字节码级别,主体变量从运行时加载的结构化.class文件的内存地址中只加载一次到处理器寄存器中,并且在switch语句中; 而在if语句中,由代码编译DE生成不同的jvm指令,这要求将每个变量加载到寄存器中,尽管使用了与if语句的下一个前一个相同的变量。 如果你知道用汇编语言编码,那么这将是司空见惯的; 尽管java编译的coxes不是字节码或者直接的机器码,但是这里的条件概念仍然是一致的。 那么,我试图在解释时避免更深入的技术性。 我希望我已经使这个概念清楚并且揭穿了神秘面纱。 谢谢。
链接地址: http://www.djcxy.com/p/86587.html