switch...case 与 if...else 的性能分析

switch...case 与 if...else的根本区别在于,switch...case 会生成一个跳转表来指示实际的 case 分支的地址,而这个跳转表的索引号与 switch 变量的值是相等的。从而,switch...case 不用像 if...else 那样遍历条件分支直到命中条件,而只需访问对应索引号的表项从而到达定位分支的目的。

1.当分支较多时,当时用 switch 的效率是很高的。因为 switch 是随机访问的,就是确定了选择值之后直接跳转到那个特定的分支,但是 if else 是遍历所以得可能值,知道找到符合条件的分支。如此看来,switch 的效率确实比 if else 要高的多。

2.由上面的汇编代码可知道,switch...case 占用较多的代码空间,因为它要生成跳表,特别是当 case 常量分布范围很大但实际有效值又比较少的情况,switch...case 的空间利用率将变得很低。

3.switch...case 只能处理 case 为常量的情况,对非常量的情况是无能为力的。例如 if (a > 1 && a < 100),是无法使用 switch...case 来处理的。所以,switch 只能是在常量选择分支时比 if else 效率高,但是 if else 能应用于更多的场合,if else 比较灵活。

参考:https://zhuanlan.zhihu.com/p/149090160

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值