switch 多选择结构(多选分支结构)
switch case 语句判断一个变量与一系列值中的某个值是否相等,每个值称为一个分支.
switch 语句中的变量可以是:
- byte , short , int , 或者 char .
- 从 Java SE 7 开始
- switch 支持字符串String 类型了
- 同时 case 标签必须为字符串常量 或字面量.
案例
public class SwitchDemo {
public static void main(String[] args) {
char grade='B';
switch(grade){//switch 匹配一个具体的值
case 'A':
System.out.println("优秀");
break;//可选
case 'B':
System.out.println("良好");
break;//可选
case 'C':
System.out.println("及格");
break;
case 'D':
System.out.println("再接再厉");
break;
case 'E':
System.out.println("挂科");
break;
default:
System.out.println("未知等级");
}
}
}
运行结果:
良好
case 穿透现象
break; 很重要,如果不加break会导致case穿透,达不到想要的效果
public class SwitchDemo {
public static void main(String[] args) {
char grade='B';
switch(grade){
case 'A':
System.out.println("优秀");
case 'B':
System.out.println("良好");
case 'C':
System.out.println("及格");
case 'D':
System.out.println("再接再厉");
case 'E':
System.out.println("挂科");
default:
System.out.println("未知等级");
}
}
}
运行结果:
良好
及格
再接再厉
挂科
未知等级
String 案例
- JDK7的新特性,表达式结果可以是字符串!
- 字符的本质还是数字
public class SwitchDemo {
public static void main(String[] args) {
String grade="镖哥";
switch(grade){
case "肖老板":
System.out.println("肖老板");
break;
case "镖哥":
System.out.println("镖哥");
break;
default:
System.out.println("弄啥咧!!!");
}
}
}
运行结果:
镖哥
字符的本质还是数字,看看反编译后的代码
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package base;
public class SwitchDemo {
public SwitchDemo() {
}
public static void main(String[] args) {
String grade = "镖哥";
byte var3 = -1;
switch(grade.hashCode()) {
case 1206863:
if (grade.equals("镖哥")) {
var3 = 1;
}
break;
case 32676532:
if (grade.equals("肖老板")) {
var3 = 0;
}
}
switch(var3) {
case 0:
System.out.println("肖老板");
break;
case 1:
System.out.println("镖哥");
break;
default:
System.out.println("弄啥咧!!!");
}
}
}