专栏首页踏浪的文章switch...case与if...else执行能力分析

switch...case与if...else执行能力分析

switch...caseif...else作为条件判断语句在程序中用的是非常多的。

对比

基本用法

// switch
switch( 条件表达式 ){
  case a:
  // do something
    break;
  case b:
  // do something
    break;
  case c:
  // do something
    break;
  default:
  // do something
    break;
}

// if else
if ( 条件表达式1 ) {
  // do something
} else if ( 条件表达式2 ) {
  // do something
} else if ( 条件表达式 3) {
  // do something
} else {
  // do something
}

除了写法上的差异,两者在执行上面也是不同的。使用switch进行判断,执行的时间可能会更短,但是所消耗的空间会更多。

switch语句根据一个整数索引值进行多重分支,底层采用跳转表这种数据结构。跳转表是一个数组,表项 i 对应代码段的地址,当switch索引值等于表项i时采取对应的程序操作。

简单可理解为:执行switch时生成一个长度为最大case常量+1的数组,程序首先判断switch变量是否大于最大case 常量,若大于,则跳到default分支处理;否则取得数组索引号为switch变量值大小,取得数组对应值即为相应case代码块地址,程序接着跳到此地址执行,完成分支的跳转。

所以,switch语句的执行速度相对于if语句执行速度会更快。但是因为switch会生成一个临时的数组,所以,占用的内存可能会更大。

对于if语句,则是系统自上而下的按照条件逐个去判断,知道匹配到合适的条件,否则会执行完整个if语句,所以执行的时间可能会很长,速断会更慢。因此,也得出,在编写代码的时候,需要将几率大的条件置于条件判断的最前面。

但是,switch在对于非常量的情况下面是无能为力的,比如 if(x > 1 && x < 100) 这样的条件,使用switch是无法处理的,case语句不支持一个判断类型的表达式。但是,if语句就对这个就毫无压力。

所以,在只是处理常量的时候,推荐使用 switch 语句判断,如果涉及到了表达式,那么推荐使用 if…else 语句进行判断。

我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=2ijs33h17bi8k

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Flutter lesson 9: Flutter的网络(HTTP)请求

    Flutter中网络请求有两种,一个是使用Flutter自带的网络请求,另一种则是使用第三方HTTP请求插件dio

    踏浪
  • 各种IT网站收藏

    踏浪
  • ECMA-262-3 详解:1、执行上下文

    从来没有深入了解ECMA,网上找了一下,发现早在2010年就有大佬 Dmitry Soshnikov[1] 总结了ECMA中的核心内容,我这里只是翻译记录,加深...

    踏浪
  • 流程控制

    顺序结构是程序中最简单、最基本的流程控制,它没有特定的语法结构,程序会按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。

    清出于兰
  • 线上发布会 |《新冠肺炎疫情下的旅游需求趋势研究报告》发布会即将召开

    ? 新冠肺炎疫情是新中国成立以来在我国发生的传播速度最快、感染范围最广、防控难度最大的一次重大突发公共卫生事件,给经济社会带来很大影响,给旅游行业也带来巨大挑...

    腾讯文旅
  • EF基础知识小记六(使用Code First建模自引用关系,常用于系统菜单、文件目录等有层级之分的实体)

    日常开发中,经常会碰到一些自引用的实体,比如系统菜单、目录实体,这类实体往往自己引用自己,所以我们必须学会使用Code First来建立这一类的模型. 以下是自...

    郑小超.
  • 作为程序员,难道你心里没点“B树”?

    顺序存储的特点是各个存储单位在逻辑和物理内存上都是相邻的,典型的就是代表就是数组,物理地址相邻因此我们可以通过下标很快的检索出一个元素

    xcbeyond
  • xpath 和 pyquery

    谢伟
  • 给小程序list列表加个搜索功能

    本文介绍方法搜索效率太低,之前没有想到有更好的方法。现在我用的是直接搜索,然后把匹配结果放进新数组

    TLingC
  • 深入理解红黑树

    前面的文章已经介绍过二叉搜索树,AVL树,以及2-3Tree,今天我们再来学习一下二叉搜索树里面的大佬,它就是红黑树。红黑树(英语:Red–black tree...

    我是攻城师

扫码关注云+社区

领取腾讯云代金券