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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王运科 中级黑马   /  2012-3-30 15:20  /  3769 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

方法一:
if(... ...)
    ... ...
else if (... ...)
    ... ...
else if (... ...)
    ... ...
else
    ... ...

方法二:
switch(... ...)
{
     case 1:
      ... ...
       break;
    case 2:
      ... ...
       break;
    case 3:
      ... ...
       break;
}

在使用的时候,上面两种方法有什么不同?

13 个回复

倒序浏览
if else 作用范围广
switch语句可选择的类型只有四种:byte , short , int , char
回复 使用道具 举报
switch进行一次条件判断后直接执行到程序的条件语句.
  
   if...else有几种条件,就得判断多少次.


   如果纯粹比较数字或字符,建议使用switch,因为它只会在一开始的switch括号中取出变量值一次,然后将这个值与下面所设定的case比较,但如果使用if,每次遇到条件式时,都要取出变量值,效率的差异就在这儿。例如:
if(a == 1)
//...
else if(a == 2)
//...
else if(a == 3)
//...
    这个程序片段在最差的状况下,也就是a =3时,共需3次比较,而每次比较都必须取出变量a的值一次。如果换成switch:
switch(a)
{
case 1:
//...
break;
case 2:
//...
break;
case 3:
//...
break;
}
   在这个程序片段中,只在开头switch的括号中取出变量a的值,然后逐一比较下面的case,效率的差别就在这儿。当然并不是使用if就不好,遇到复合条件时,switch就帮不上忙了,由于无法在switch中组合复杂的条件语句,这时就得使用if了。
   注意:如果所有选项出现概率相同的话,结论就是:5个选项(包括default)的情况下,switch和if/elseif相同。低于5个选项if快,高于5个选项switch快!



回复 使用道具 举报

if else 作用范围广
switch语句可选择的类型只有四种:byte , short , int , char
而且if-else适用于区间问题,而switch适用于明确单个问题。
回复 使用道具 举报
switch进行判断后直接执行到符合条件的语句.
if...else和switch的比较原理差不多,只是switch语句可选择的类型只有四种:byte , short , int , char,后面的JDK也支持string,而if的选择类型随意,方便一些,只是书写麻烦
回复 使用道具 举报
if使用范围更广    可以很多条件来 限制 范围
switch 比较单一。。  一般只对  选择 条件不多的   只有几个 选择项  用   更方便 。。。。。。。。
回复 使用道具 举报
if...else范围广,switch 比较单一。
if...else没有switch 效率高。
回复 使用道具 举报
if  else if  else 适用于区间判断还有其他方面的选择,而switch用于等值判断,一般是一个个点。补充楼上一点,jdk1.7 switch也支持字符串了!
回复 使用道具 举报
陈扬 中级黑马 2012-3-30 22:17:54
9#
1.if-else 作用范围广而且if-else适用于区间问题,但是在执行的时候需要一条一条地去判断if else 里面的条件
2.switch语句可选择的类型只有四种:byte , short , int , char;再有switch,就是先判断条件,如果符合就直接执行条件的那个代码块;
3.如果同一个问题用if-else和switch来做的话,相对来说switch的执行效率会更高。
回复 使用道具 举报
表面上的区别:   
if(condition){}else{}中condition必须是boolean类型;
而switch (key) {
case value:
break;
default:
break;
}
  中key必须是int类型或兼容类型。 在某些情况下break还可以换成别的如:
static int Mine(int i){
switch(i){
case 0:{return 1; }
case 1:{return 0; }
}
return是返回,其实它同时结束了方法,所以在这种情况下他可以代替break;
内层区别:
switch是控制选择的一种方式,编译器生成代码时可以对这种结构进行特定的优化,从而产生效率比较高的代码。switch和if-else相比,由于使用了Binary Tree算法,绝大部分情况下switch会快一点,除非是if-else的第一个条件就为true,只是在实际开发中  没有人会去用很多很多else if的,都是用 switch case 的 ,后者比较清晰,给人感觉就是一个脑子很清楚的人写出来的东西编译器编译switch与编译if...else...不同。不管有多少case,都直接跳转,不需逐个比较查询。相比于if-else结构,switch的效率绝对是要高很多的,但是switch使用查找表的方式决定了case的条件必须是一个连续的常量。而if-else则可以灵活的多。 可以看到if-else只是单纯地一个接一个比较,效率比较低,可以看出,switch的效率一般比if-else高。
回复 使用道具 举报
跟着学习了。
回复 使用道具 举报
张龙 来自手机 注册黑马 2012-3-31 21:51:38
12#
if else if使用在范围较大的情况,挨个判断条件,而switch 数据类型限于byte,short,int,char,一般用于数据明确的多选情况,满足条件的case直接执行动作,略效率
回复 使用道具 举报
switch语句类似于枚举,但变量一定是用switch比较好,当变量不确定时用if else就比较好
if else 作用更范围广
回复 使用道具 举报
if  else  表示判断条件。
swith  表示选择。
一个就好比判断题 只有true或false,根据返回的结果去执行逻辑代码。
而另一个好比选择题有a,c,d等等,根据你指定的选项去对应执行的逻辑代码。
这样形象的比喻希望你能懂。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马