【发布时间】:2010-01-28 23:21:05
【问题描述】:
可能的重复:
is “else if” faster than “switch() case” ?
What is the relative performance of if/else vs. switch in Java?
我再次在运行中进行编码......当调试器单步执行 case 语句时,它会立即跳转到与条件匹配的项目,但是当使用 if/else 指定相同的逻辑时,它会单步执行每个 if 语句,直到找到获胜者。 case 语句更有效,还是我的调试器只是优化了步骤? (不要担心语法/错误,我在 SO 中输入了这个,不知道它是否会编译,这是我所追求的原则,我不想把它们当作整数,因为我隐约记得一些关于使用带整数的偏移量的情况)我使用 C#,但我对跨编程语言的一般答案感兴趣。
switch(myObject.GetType()){
case typeof(Car):
//do something
break;
case typeof(Bike):
//do something
break;
case typeof(Unicycle):
//do something
break;
case default:
break;
}
VS
Type myType = myObject.GetType();
if (myType == typeof(Car)){
//do something
}
else if (myType == typeof(Bike)){
//do something
}
else if (myType == typeof(Unicycle)){
//do something
}
else{
}
【问题讨论】:
-
这甚至不是接近与语言无关的,任何答案都将与一种特定的语言紧密结合。
-
更不用说具体的编译器和编译器版本了。
-
它可能因语言、编译器和运行时而异。无法确定。
-
这甚至不是特定于语言的。它完全取决于特定的编译器实现,即使在那时也可能不是 100% 可回答的(例如,某些形式的 if 语句的优化可能与其他形式不同)。
-
顺便说一句:这个问题的真正答案是让它们都实现一个通用的接口/抽象方法,例如
Vehicle#doSomething()并且每个都在具体实现中定义本身,所以你最终会得到myObject.doSomething()。
标签: performance switch-statement if-statement