java 中分支结构if和switch结构的区别
If…else顺序判断条件分支,遇到表达式值为真时,执行代码,而switch…case生成一个跳转表来指示实际的case分支的地址,跳转表的索引号与switch变量的值相等,通过对应索引号的表项从而到达定位分支的目的。若switch变量为String类型,会有两个跳转表,先将String类型对应为一个int类型,再通过该int类型跳转到对应的分支。
switch是选择结构而if是多重选择结构
相同点:都可以判断多分支条件的结构
不同点:if选择结构 多用于范围性判断,没有switch选择结构条件的限制;switch选择结构,多用于判断等值判断
其中:
基本if选择结构: 处理单一或组合条件的情况
If-else选择结构:处理简单的条件分支情况
多重if选择结构:处理复杂的条件分支情况
嵌套if选择结构:用于较为复杂的流程控制
而switch选择结构
多重分支并且条件判断是等值判断的情况
处理系统异常(用户输入异常)
if和switch基本相同,但有一些差别:
(1)if的条件语句可以用表达式,switch则不行
(2)if 与else 或者 else if else 成对使用,也可单独使用,switch则与case搭配使用
(3)if条件不成立后才会去执行else中的语句,但是switch case语句中,如果case 语句中没有break,则会继续执行后面的语句
第三条是经常遇到的问题。
一、IF用法
if 主要有二种形式,if...then以及if...then..else形式。if只能对布尔值boolean进行判断,如下condition0、condition1和condition2必须为true或者false。
// if示例-1
boolean condition0 = false;
if (condition0) {
//
}
// if示例-2
boolean condition1 = true;
if (condition1) {
//
} else {
//
}
// if示例-3
boolean condition2 = true;
if (condition0) {
//
} else if (condition1) {
//
} else if (condition2) {
//
} else {
}
二、Switch用法
switch 有多个case块, 每个case后面的常量不能相同。
String expr = "1";
switch (expr) {
case: "0":
//
break;
case "1":
//A
break;
case "2":
//B
break;
default:
//C
}
三、if和switch的主要区别
(1)if的判断条件只能为布尔值,但是switch的expr可以为char, byte, short, int, Character, Byte, Short, Integer, String和enum枚举;
(2)if中的默认分支叫做else,就像上面的if-else if-else,switch的默认分支是一个default块;
(3)if的每个判断块只会有一个被执行,但是switch的一次判断中,可以有多个case被执行。比如上面的switch的例子中,如果在case块中没有break或者return,符合case=1后面的表达式的都会被执行,官方叫做_fall through_,从匹配的case后面每一个case块中顺序执行,即代码A->B->C处的代码都会被执行;
(4)if的判断分支可以多个为true,但是只有第一个if或者elseif会被执行,switch的case后面的常量不能相同,否则无法编译;
(5)switch后面的expr必须要和所有case后面的值一致,但是if判断的条件或表达式只能是布尔值。