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("弄啥咧!!!"); } } }