- 多选择结构还有一个实现方式就是switch case语句。
- switch case语句判断一个变量与一系列值中某个值是否相等,每个值为一个分支。
- if判断区间,switch匹配一个具体的值。
- 语法:
switch(expression){
case value :
//语句
break;//可选
case value :
//语句
break;//可选
//可以有任意数量的case语句
default : //可选
//语句
}
- switch语句中的变量类型可以是:
- byte,short,int,char
- 从Java SE 7开始,switch支持字符串String类型
- 同时case标签必须为字符串常量或字面量。
import java.util.Scanner;
public class SwitchDome1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入等级:");
String grade = scanner.nextLine();
switch (grade){
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("未知等级");
}
scanner.close();
}
}
====演示====
请输入等级:
C
及格
- case穿透:上面的代码去掉几个break
import java.util.Scanner;
public class SwitchDome2 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入等级:");
String grade = scanner.nextLine();
switch (grade){
case "A" :
System.out.println("优");
break;
case "B" : //删去了break
System.out.println("良");
case "C" : //删去了break
System.out.println("及格");
case "D" :
System.out.println("再接再厉");
break;
case "E" :
System.out.println("挂科");
break;
default :
System.out.println("未知等级");
}
scanner.close();
}
}
====演示====
B
良 //这里输入B返回“良”之后,没有break语句,继续输出。
及格
再接再厉//直到“再接再厉”才有break语句。
- 为了解释JDK7之后是如何支持String类型的,秦疆老师用IDEA打开了class文件,也就是字节码文件,他称这一过程叫反编译。接着展示了String类型是如果通过哈希值,而被switch语句支持。(虽然完全不明所以)
- 在JDK21,通过秦疆老师的方法打开class文件,显示的代码与原本无异,看不到“哈希”字样。
- 在菜单栏View选项下有一个Show Bytecode工具,点击后,也会出现字节码。但是和秦疆老师展示的完全不一样了,能看到“哈希”的字样,其他的就看不懂了。