A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© canhotboy   /  2015-4-13 21:21  /  4680 人查看  /  45 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

各有各好
回复 使用道具 举报
本帖最后由 xiniuniu 于 2015-4-17 19:29 编辑

这个主要看编译器特性, 一般情况下, 当switch分支小于等于3个时, 生成的代码和if else几乎没有太大差别,  如果分支在4个以上, 编译器则会对代码进行算法上的优化,  比如
  1.         int a = 2;
  2.         
  3.         switch (a)
  4.         {
  5.             case 1:
  6.                 printf("1");
  7.                 break;
  8.                
  9.             case 2:
  10.                 printf("2");
  11.                 break;
  12.                
  13.             case 4:
  14.                 printf("4");
  15.                 break;
  16.                
  17.             case 5:
  18.                 printf("5");
  19.                 break;
  20.                
  21.             case 7:
  22.                 printf("7");
  23.                 break;
  24.                
  25.             default:
  26.                 break;
  27.         }

  28.     }
复制代码

代码会生成一个指针数组, 这个数组中一共有7个元素, 每个元素分别指向   不同case所对应代码起始处的地址
如上例, a = 2,  首先对a 进行减1操作  得到1,
然后1 和6比较, 看是否大于 6,  大于 6 直接跳到default代码处
不大于6 ,再和0比较, 小于0, 直接跳到default处
不小于0, 则直接执行 以1为下标的数组中指向地址处代码


如果用if else可能要判断很多次, 而用以上优化后的代码,最多也就判断3次, 如果case语句有几十个的情况下呢? 显然这时要比if  else效率得多
较少的分支用if else 和switch都无所谓,   当分支较多,而又比较连续, switch是不二之选

回复 使用道具 举报
:handshake
回复 使用道具 举报
if使用于 比较范围 switch适用于比较“点”的值
for example:比如你想确定一个变量是否在一个区间上面时 用if;而当 你想比较一个变量是否为某一个值时 用switch. PS:switch结构中可以用枚举来替代具体的值 这样可读性好。

结论:完全可以用if替代switch使用,但是在比较“点” 的情况下,在下还是喜欢用switch,感觉可读性好些。PS:好像最新的swift 语言的switch语句 已经可以支持比较范围区间了。
回复 使用道具 举报
switch的case分支必须是常量,没有if …… else if……用着灵活,因此用得比较少。
回复 使用道具 举报
switch通常是与case连用,if的灵活性较高,而且switch适合用在判断类型差不多,但是选择条件较多的场合;还有,只要是switch能做到的,if都能做到,而if能做到的,switch就不一定能
回复 使用道具 举报
各位大神已经解决了你的问题,你把所以的回复都看了就懂了!:lol
回复 使用道具 举报
if就可以来  至于性能是以后考虑的事情啦
回复 使用道具 举报
if是判断语句,switch是选择语句,当如果是要判断真假和逻辑运算的时候最好用if,switch当条件不多的时候更快捷一些
回复 使用道具 举报
根本就是不同的东西啊,用在哪方便就用那个呗,谈不上区别,可以嵌套用
回复 使用道具 举报
默默的顶下
回复 使用道具 举报
if 和switch在很多情况下是可以互换的,但是IF的范围更灵活更广泛一点,这些基础视频里面都有呢
回复 使用道具 举报
if -else 语句中最多只能执行一个分支,有else分支必须选其一执行,
switch - case语句只能用于整型或字符串做条件时的分支,只能处理有限数量的常量
回复 使用道具 举报
if语句一般用于处理一个或两个分支的选择结构,如果分支较多,就需要使用if语句嵌套,但嵌套的if语句层数越多,程序越复杂,可读性越差。而switch语句能同时处理多个分支选择结构,使用起来比较清晰,但是没有if语句功能强大,switch语句判断的条件比较有规律而且判断条件有个数,if语句就不需要了
回复 使用道具 举报
如果一个参数有多个条件多段执行操作那么用switch比较便捷,但是记得每一个case后面加break跳出,if的话就是条件判断语句了,if(条件){执行内容};
回复 使用道具 举报
n你都25技术分 了你还不知道?
回复 使用道具 举报
IF是判断条件,SWITCH只能判断数值
回复 使用道具 举报
看情况。if判断条件,处理逻辑表达式。switch 通常处理算术表达式,或字符,当它等于什么什么,转向做什么。switch相当开关如果“比较整数”,i1 是否大于 i2, 当然用if如果决定转向,例如 i=1 画直线,i=2 画曲线,i=3 画圆,i=4 画虚线直线, i=5 画虚线曲线, i=6 画长方形 i=其他值 返回重选这当然用switch,switch 执行快。
回复 使用道具 举报
if可以灵活一些,switch只是在固定一些模式下才实用,我是这样理解的...
回复 使用道具 举报
楼上总结的给力,mark了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马