4.5 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 ://可选 //语句 }
示例
package com.baidu.www.struct; public class SwitchDemo01 { public static void main(String[] args) { /*case 穿透,Switch匹配一个具体的值,它在执行case语句时会先匹配 匹配成功后就执行当前case的语句,返回当前的值 再根据case后是否有break语句判断是否执行后面的输出语句 如果没有break语句就会执行后面的输出语句 因此每写完一个case语句都要用break结尾*/ 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("再接再厉"); int i = 6; int f = 3; System.out.println(i+f); case 'E' : System.out.println("挂科"); default : System.out.println("未知等级"); } } } /* * 及格 再接再厉 9 挂科 未知等级 Process finished with exit code 0*/
if是判断区间比较方便,而case则是匹配一个具体的值
一、从Java SE7 开始switch 支持字符串 String 类型了,同时case标签必须为字符串常量或字面量
示例
package com.baidu.www.struct;
import java.util.Scanner;
public class SwitchDemo02 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
//JDK7的新特性,表达式结果可以是字符串!!!
//字符的本质还是数字
switch (name){
case "张三":
System.out.println("张三");
break;
case "肆悟先生":
System.out.println("肆悟先生");
break;
default:
System.out.println("弄啥嘞!");
scanner.close();
}
}
}
/*
* 肆悟先生
肆悟先生
Process finished with exit code 0*/
二、反编译
反编译:我们编写的文件是java文件,编译之后变成class文件,class文件是字节码文件,字节码文件普通人是看不懂的看不懂就需要通过“反编译”,反编译成我们的java程序或者其他我们能看懂的,反编译的工具使用IDEA就可以实现反编译。
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package com.baidu.www.struct;
import java.util.Scanner;
public class SwitchDemo02 {
public SwitchDemo02() {
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
byte var4 = -1;
switch(name.hashCode()) {
case 774889:
if (name.equals("张三")) {
var4 = 0;
}
break;
case 1004628848:
if (name.equals("肆悟先生")) {
var4 = 1;
}
}
switch(var4) {
case 0:
System.out.println("张三");
break;
case 1:
System.out.println("肆悟先生");
break;
default:
System.out.println("弄啥嘞!");
scanner.close();
}
}
}
从反编译的字节码文件可以看出switch之所以能够匹配字符串是匹配了字符串的hashCode,也就是说最终还是匹配的一个具体的数字。每一个对象都有自己的hashCode。
使用IDEA反编译直接将class文件放在IDEA中即可。