关于java:Switch语句vs if语句,哪个性能更好?

Switch statement vs if statement, which is better for performance?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
If vs. Switch Speed

我将用C++作为一个例子,但是我问的问题不是针对一种特定的语言。我是说一般情况下。哪一个性能更好?这不是关于编程风格的问题。

当然,在某些情况下,switch语句可能比if语句更容易使用。但如果你想要最大的性能。例如,如果有数千行代码和超过10个可以用if语句替换的switch语句,哪一个会导致更好的性能?

例子:

1
2
3
4
5
6
7
8
9
10
11
if(x == 6){
do this
}

if(x == 67){
do this * 2
}

if(x == 9000){
do this * 3
}

VS

1
2
3
4
5
6
7
8
9
10
11
//Please forgive me if the syntax for the switch statement is wrong, I haven't use one in any programming language for a long time
Switch(x){
case 6:
    do this

case 67:
    do this * 2

case 9000:
    do this * 3
}

那么,这在性能上有什么不同呢?当你回答时,确保你的答案包括你所指的编程语言。如果在Java中,你说的是Java而不是C++,JavaScript,你选择回答我的问题的语言。


交换机(取决于实现)使用跳转表(在C和C++中),因此在某些条件下它可能更具性能。通常,它会更清楚地说明您的意图,以便编译器可以假装它是智能的。

考虑到您的示例中的if甚至不使用else if链,它使switch更快(因为不评估所有条件),也可能改变代码的含义(如果您的dothises修改x


根据这个基准,switch语句更快。

http://jspef.com/switch-vs-if3


通常,如果您有一个非常具体的值/操作列表,那么它们都可以。在大多数情况下,由于能够从已知的编译时值创建跳转表,切换可能更快一些。但是,在某些特定的情况下,您可以使用switch语句专门提高性能,例如duff的设备。


使用C++,开关语句比多个if语句执行速度更快。这是因为编译器能够优化switch语句,但是如果有多个if,代码必须按照程序员设置的顺序处理每个if语句。对于switch语句,它不依赖于早期的情况,因此编译器能够重新排序,从而加快执行速度。


好吧,如这里所述:if与switch speed,这里:switch over if else语句的优点

因此,实际上,由于编译器能够进行一点优化,因此在Dertain环境下,switch比大量链接的if-else语句更快。