首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Case vs If Else If:哪个更有效?

Case vs If Else If:哪个更有效?
EN

Stack Overflow用户
提问于 2010-01-29 07:21:06
回答 7查看 201.2K关注 0票数 64

可能的重复项:

is “else if” faster than “switch() case” ?

What is the relative performance of if/else vs. switch in Java?

我一直在编写运行中的again....when调试器单步执行case语句,它会立即跳转到与条件匹配的项,但是当使用if/else指定相同的逻辑时,它会单步执行每条if语句,直到找到胜利者。是case语句更有效,还是我的调试器只是在优化单步执行?(不用担心语法/错误,我输入了C#,不知道它是否可以编译,这是我追求的原则,我不想把它们当作整数,因为我模糊地记得一些关于大小写和整数的偏移量)我使用C#,但我对跨编程语言的通用答案感兴趣。

代码语言:javascript
复制
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

代码语言:javascript
复制
   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{

   }
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-01-29 07:28:35

似乎编译器在优化switch语句方面比if语句更好。

编译器不知道if语句的求值顺序对您是否重要,也不能在那里执行任何优化。您可以在if语句中调用方法,从而影响变量。通过switch-语句,它知道可以同时计算所有子句,并可以按任何最有效的顺序放置它们。

下面是一个小的比较:

http://www.blackwasp.co.uk/SpeedTestIfElseSwitch.aspx

票数 97
EN

Stack Overflow用户

发布于 2010-01-29 07:30:22

调试器使它变得更简单,因为您不想单步执行编译器创建的实际代码。

如果开关包含五个以上的项,则使用查找表或哈希表来实现,否则使用if..else来实现。

请参阅密切相关的问题is “else if” faster than “switch() case” ?

当然,C#以外的其他语言实现它的方式或多或少会有所不同,但switch通常更有效。

票数 9
EN

Stack Overflow用户

发布于 2010-01-29 07:36:44

许多编程语言对switch语句进行了优化,使其比标准的if-else if结构快得多,前提是case是编译器常量。许多语言使用跳转表或索引branch table来优化切换语句。Wikipedia对switch语句进行了很好的讨论。此外,here还讨论了C语言中的交换机优化。

需要注意的一点是,switch语句可能会被滥用,根据具体情况,最好使用多态性而不是switch语句。有关示例,请参阅here

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2158759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档