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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

if和switch的区别有哪些呢

45 个回复

倒序浏览
其实我也想问这个问题,有了答案,给我说一声,谢谢
回复 使用道具 举报
这个嘛不太清楚,不过百度应该知道一些的,呵呵
回复 使用道具 举报
这两个条件结构在很多的情况的都是可以互换的吧,在数值的较多的情况下,还是if结构方便很多
回复 使用道具 举报
switch能做的事情,if都能做,if能做的事情,switch不一定都能做

点评

是的,我同意这个,,,if更灵活,  发表于 2015-5-10 10:19
回复 使用道具 举报
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 的效率高很多。
回复 使用道具 举报
基础视屏里都有的,好好看看基础视屏,就一切ok!
回复 使用道具 举报
这个都不知道,你才学到哪里啊
回复 使用道具 举报
if的灵活性比switch高,switch能完成的if都可以完成,所以你不用纠结这个问题,用if就可以了。
回复 使用道具 举报
if比switch更适用于范围的判断,if()判断条件可以是任何带真假性的数,switch()判断条件只能是整形的数(ASCII码对应整形)
回复 使用道具 举报
楼主你好,如果我解决了你的问题,请按照这个帖子把问题改成已解决,这样你我都能得到技术分,谢谢
http://bbs.itheima.com/thread-85079-1-1.html
回复 使用道具 举报
视频总结:
1.很多情况下,两者可以互换。
2.if用的较多,比较灵活,而switch只能某个单值。
回复 使用道具 举报
if更灵活一些,,
回复 使用道具 举报
逆流瞅瞅 发表于 2015-4-15 22:17
视频总结:
1.很多情况下,两者可以互换。
2.if用的较多,比较灵活,而switch只能某个单值。 ...

:handshake
回复 使用道具 举报
区别:
1 if语句能够完成的功能switch并不一定能完成;
2 在某些情况下,if好switch语句可以相互转化;
3 switch能够完成的功能if语句都能完成的
希望能够帮到你,哈哈
回复 使用道具 举报
最好的安排 发表于 2015-4-17 13:03
区别:
1 if语句能够完成的功能switch并不一定能完成;
2 在某些情况下,if好switch语句可以相互转化;

:handshake
回复 使用道具 举报
if是条件判断语句而swich是条件选择语句,一个负责判断是否符合条件要求,一个根据已经给出的条件,选择执行的代码块。
回复 使用道具 举报
各有各好
回复 使用道具 举报
本帖最后由 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
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 加入黑马