Java 中if-else多分支结构和switch-case结构

一、if分支结构

If() { }

If() {} else {}

If() {} if() {} if() {}

If() {} else if() {} else if() {} else {}

说明:

1) 可以进行嵌套,或者多重嵌套,但为保证代码逻辑清晰,提高可读性,尽量不要嵌套。

2) 按先后顺序依次判断是否成立,当一个if 语句检测为真,后面的else if 及 else语句都将被跳过。

在多分支条件下,若最多只有一个分支条件成立,使用If() {}  else if() {} else if() {} else {} ,且按分支出现概率从大到小排放条件表达式,即概率上出现最多的放在最前面,减少程序判断次数,提高效率。

多分支同时成立且都需要处理的情况下,需使用If() {}  if() {} if() {}。

二、switch结构

switch(expression){

    case value :

       //语句

       break; //可选

    case value :

       //语句

       break; //可选

    //你可以有任意数量的case语句

    default : //可选

       //语句

}

说明:

  1. switch 语句中的变量类型可以是: byte、short、int 或者 char、String(从Java SE 7 开始),同时case 标签必须为字符串常量或字面量。

    1. switch 语句可以拥有多个 case 语句。每个 case 后面跟一个要比较的值和冒号。

    2. case 语句中的值的数据类型必须与变量的数据类型相同,而且只能是常量或者字面常量。

    3. 当变量的值与 case 语句的值相等时, case 语句之后的语句开始执行,直到 break 语句出现才会跳出 switch 语句。如果没有 break 语句出现,程序会继续执行下一条 case 语句,直到出现 break 语句。

    4. switch 语句可以包含一个 default 分支,该分支必须是switch 语句的最后一个分支。default 在没有case 语句的值和变量值相等的时候执行。default 分支不需要 break 语句。

三、if与switch区别

if…else顺序判断条件分支,遇到表达式值为真时,执行代码,而switch…case生成一个跳转表来指示实际的case分支的地址,跳转表的索引号与switch变量的值相等,通过对应索引号的表项从而到达定位分支的目的。若switch变量为String类型,会有两个跳转表,先将String类型对应为一个int类型,再通过该int类型跳转到对应的分支。

四、if 与switch比较

A) 时间

效率–仅从跳转次数来比较两者的效率, 不考虑编译器的优化和条件传送

分支较多时,大于3,switch效率高。

分支较少时,小于3,if…else结构更好

B)空间

switch…case占用较多的代码空间,因为它要生成跳表。(特别是当case常量分布范围很大但实际有效值又比较少的情况,switch…case的空间利用率将变得较低。----未能深入理解)

C)适用范围

  • switch…case只能处理case为常量(byte、short、int 或者 char。String(从Java SE 7 开始))的情况,对非常量的情况是无能为力的。例如 if (a > 1 && a < 100),是无法使用switch…case来处理的。所以,switch只能是在常量选择分支时比ifelse效率高,但是if else能应用于更多的场合,比较灵活。

猜你喜欢

转载自blog.csdn.net/qq_40243365/article/details/83185458
今日推荐