黑马程序员技术交流社区

标题: if和switch [打印本页]

作者: canhotboy    时间: 2015-4-13 21:21
标题: if和switch
if和switch的区别有哪些呢

作者: wang619590713    时间: 2015-4-13 21:24
其实我也想问这个问题,有了答案,给我说一声,谢谢
作者: H_黑马论坛    时间: 2015-4-14 16:20
这个嘛不太清楚,不过百度应该知道一些的,呵呵
作者: 星空眼泪    时间: 2015-4-14 16:27
这两个条件结构在很多的情况的都是可以互换的吧,在数值的较多的情况下,还是if结构方便很多
作者: Errors    时间: 2015-4-14 22:50
switch能做的事情,if都能做,if能做的事情,switch不一定都能做
作者: sunyang    时间: 2015-4-14 23:41
For just a few items, the difference is small. If you have many items you should definitely use a switch.
If a switch contains more than five items, it's implemented using a lookup table or a hash list. This means that all items get the same access time, compared to a list of if:s where the last item takes much more time to reach as it has to evaluate every previous condition first.

大致的意思就是说在五个条目以下时候switch 和 if 的速度是一样的,一旦超过五个条目在编译的时候 switch 会按照查表法 或者 哈希表变异,要比 if 的效率高很多。

作者: malcold    时间: 2015-4-15 10:47
基础视屏里都有的,好好看看基础视屏,就一切ok!
作者: 波阿波    时间: 2015-4-15 19:07
这个都不知道,你才学到哪里啊
作者: x331275955    时间: 2015-4-15 21:30
if的灵活性比switch高,switch能完成的if都可以完成,所以你不用纠结这个问题,用if就可以了。
作者: 执念    时间: 2015-4-15 21:46
if比switch更适用于范围的判断,if()判断条件可以是任何带真假性的数,switch()判断条件只能是整形的数(ASCII码对应整形)
作者: sunyang    时间: 2015-4-15 22:09
楼主你好,如果我解决了你的问题,请按照这个帖子把问题改成已解决,这样你我都能得到技术分,谢谢
http://bbs.itheima.com/thread-85079-1-1.html
作者: 逆流瞅瞅    时间: 2015-4-15 22:17
视频总结:
1.很多情况下,两者可以互换。
2.if用的较多,比较灵活,而switch只能某个单值。
作者: 流云踏风    时间: 2015-4-15 22:26
if更灵活一些,,
作者: canhotboy    时间: 2015-4-16 20:12
逆流瞅瞅 发表于 2015-4-15 22:17
视频总结:
1.很多情况下,两者可以互换。
2.if用的较多,比较灵活,而switch只能某个单值。 ...

:handshake
作者: 最好的安排    时间: 2015-4-17 13:03
区别:
1 if语句能够完成的功能switch并不一定能完成;
2 在某些情况下,if好switch语句可以相互转化;
3 switch能够完成的功能if语句都能完成的
希望能够帮到你,哈哈
作者: canhotboy    时间: 2015-4-17 17:59
最好的安排 发表于 2015-4-17 13:03
区别:
1 if语句能够完成的功能switch并不一定能完成;
2 在某些情况下,if好switch语句可以相互转化;

:handshake
作者: Tony鱼先森    时间: 2015-4-17 18:13
if是条件判断语句而swich是条件选择语句,一个负责判断是否符合条件要求,一个根据已经给出的条件,选择执行的代码块。
作者: Akrios    时间: 2015-4-17 18:15
各有各好
作者: xiniuniu    时间: 2015-4-17 19:27
本帖最后由 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是不二之选


作者: canhotboy    时间: 2015-4-18 14:37
:handshake
作者: 麻木    时间: 2015-4-18 14:57
if使用于 比较范围 switch适用于比较“点”的值
for example:比如你想确定一个变量是否在一个区间上面时 用if;而当 你想比较一个变量是否为某一个值时 用switch. PS:switch结构中可以用枚举来替代具体的值 这样可读性好。

结论:完全可以用if替代switch使用,但是在比较“点” 的情况下,在下还是喜欢用switch,感觉可读性好些。PS:好像最新的swift 语言的switch语句 已经可以支持比较范围区间了。
作者: lz465350    时间: 2015-4-29 22:44
switch的case分支必须是常量,没有if …… else if……用着灵活,因此用得比较少。
作者: shenxian88    时间: 2015-4-30 00:08
switch通常是与case连用,if的灵活性较高,而且switch适合用在判断类型差不多,但是选择条件较多的场合;还有,只要是switch能做到的,if都能做到,而if能做到的,switch就不一定能
作者: tyisbest    时间: 2015-4-30 00:38
各位大神已经解决了你的问题,你把所以的回复都看了就懂了!:lol
作者: ydy96315    时间: 2015-4-30 06:47
if就可以来  至于性能是以后考虑的事情啦
作者: 淡定..    时间: 2015-4-30 12:04
if是判断语句,switch是选择语句,当如果是要判断真假和逻辑运算的时候最好用if,switch当条件不多的时候更快捷一些
作者: lyricdon    时间: 2015-4-30 14:26
根本就是不同的东西啊,用在哪方便就用那个呗,谈不上区别,可以嵌套用
作者: 嗨灬小凯    时间: 2015-4-30 14:37
默默的顶下
作者: xiongmaoren518    时间: 2015-4-30 14:49
if 和switch在很多情况下是可以互换的,但是IF的范围更灵活更广泛一点,这些基础视频里面都有呢
作者: 冰儿    时间: 2015-4-30 17:33
if -else 语句中最多只能执行一个分支,有else分支必须选其一执行,
switch - case语句只能用于整型或字符串做条件时的分支,只能处理有限数量的常量
作者: wanjiadenghuo    时间: 2015-5-9 20:20
if语句一般用于处理一个或两个分支的选择结构,如果分支较多,就需要使用if语句嵌套,但嵌套的if语句层数越多,程序越复杂,可读性越差。而switch语句能同时处理多个分支选择结构,使用起来比较清晰,但是没有if语句功能强大,switch语句判断的条件比较有规律而且判断条件有个数,if语句就不需要了
作者: wr6524798    时间: 2015-5-9 20:26
如果一个参数有多个条件多段执行操作那么用switch比较便捷,但是记得每一个case后面加break跳出,if的话就是条件判断语句了,if(条件){执行内容};
作者: 凌乱    时间: 2015-5-9 20:32
n你都25技术分 了你还不知道?
作者: wx_BZhrvVik    时间: 2015-5-9 23:59
IF是判断条件,SWITCH只能判断数值
作者: aSmallStone    时间: 2015-5-15 13:00
看情况。if判断条件,处理逻辑表达式。switch 通常处理算术表达式,或字符,当它等于什么什么,转向做什么。switch相当开关如果“比较整数”,i1 是否大于 i2, 当然用if如果决定转向,例如 i=1 画直线,i=2 画曲线,i=3 画圆,i=4 画虚线直线, i=5 画虚线曲线, i=6 画长方形 i=其他值 返回重选这当然用switch,switch 执行快。
作者: 祝皓阳    时间: 2015-5-15 20:15
if可以灵活一些,switch只是在固定一些模式下才实用,我是这样理解的...
作者: ios专用    时间: 2015-5-15 20:22
楼上总结的给力,mark了
作者: 卖报的小画家    时间: 2015-5-16 12:16
有时候switch更加优化,有时候if更有逻辑,两个有交集,又各有不同
作者: 小小黑马很成器    时间: 2015-5-16 12:40
if更灵活,只要是switch能实现的功能if都可以实现的,但是大部分情况下使用if
作者: 15578797612    时间: 2015-5-16 13:23
if是按次数循环的,switch选择循环
作者: 等风继续吹    时间: 2015-5-16 21:25
if比switch更灵活,switch的判断条件适合整形或者整形表达式,比如当某一个条件是某一个值时,适合用switch,if就比较广了。switch 呢个转为if,if不一定能转换成switch
作者: kakade    时间: 2015-5-16 22:39
if(条件)这个条件可以灵活多变
作者: kakade    时间: 2015-5-16 22:40
而switch(数值)里面不能有运算
作者: 梦初醉    时间: 2015-5-17 00:36
受教了饿
作者: 猴子啊猴子    时间: 2015-5-17 13:12
上边的同学已经总结的很好了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2