10switch选择结构
Java流程控制03--switch选择结构
switch 多选择结构
- 多选择结构还有一个实现方式就是switch case语句
- switch case 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支
- switch 语句中的变量类型可以是:
- byte、short、int或者时char
- 从Java SE7 开始 switch支持字符串String类型了(通过哈希值来比较)
- 同时case标签必须为字符串常量或字面量
switch (expression){
case value:
//语句
break;//可选
case value:
//语句
break;//可选
//你可以有任意数量的case语句
default://可选
//语句
}
case 穿透现象
产生原因:少写了case 后面少写了break导致匹配成功后直接将后面其他匹配项的输出结果也输出
- 样例1:
public class SwitchDemo01 {
public static void main(String[] args) {
//case穿透
char grade = 'C';
switch(grade){
case 'A':
System.out.println("优秀");
break;
case 'B':
System.out.println("良好");
case 'C':
System.out.println("及格");
case 'D':
System.out.println("再接再厉");
case 'E':
System.out.println("挂科");
default:
System.out.println("未知等级");
}
}
}
输出结果:

- 样例2:
public class SwitchDemo01 {
public static void main(String[] args) {
//case穿透 //switch 匹配一个具体的值
char grade = 'F';
switch(grade){
case 'A':
System.out.println("优秀");
break;
case 'B':
System.out.println("良好");
case 'C':
System.out.println("及格");
case 'D':
System.out.println("再接再厉");
case 'E':
System.out.println("挂科");
default:
System.out.println("未知等级");
}
}
}
输出结果:

switch支持字符串String类型的原理
- 样例
代码:
package com.studyhao1999.struct;
public class SwitchDemo02 {
public static void main(String[] args) {
String name = "xiaohao";
//JDK7的新特性,表达式结果可以是字符串!!!
//字符的本质还是数字
//反编译 java---class(字节码文件)---反编译(IDEA)
switch(name){
case "xiaohao":
System.out.println("xiaohao");
break;
case "xiaozhao":
System.out.println("xiaozhao");
break;
default:
System.out.println("弄啥嘞!");
}
}
}
反编译:
-
ctrl+shift+Alt+s打开struct窗口找到“Project compiler output”输出路径并在文件夹中打开找到class文件
-
右击项目文件"open in"找到"Explorer",打开所在的package,直接强制将class文件拖入其中,就可以在idea中查看
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package com.studyhao1999.struct;
public class SwitchDemo02 {
public SwitchDemo02() {
}
public static void main(String[] args) {
String name = "xiaozhao";
byte var3 = -1;
switch(name.hashCode()) {
case -2069655721:
if (name.equals("xiaohao")) {
var3 = 0;
}
break;
case 265724731:
if (name.equals("xiaozhao")) {
var3 = 1;
}
}
switch(var3) {
case 0:
System.out.println("xiaohao");
break;
case 1:
System.out.println("xiaozhao");
break;
default:
System.out.println("弄啥嘞!");
}
}
}
字符串实现思路:引入flag-->通过switch比较字符转哈希字符,改变flag的值--->再根据flag的值,再通过switch输出相应的文字

浙公网安备 33010602011771号