switch注意事项、反编译
jdk7新特性:switch可以匹配String字符串
switch穿透
当case没有break时会出现switch穿透
会执行到break位置,比如D后面有break,则输出
您的成绩为:及格
您的成绩为:不及格
public class Demo02 {
public static void main(String[] args){
char grade = 'C';
switch (grade){
case 'A' :
System.out.println("您的成绩为:优秀");
break;
case 'B' :
System.out.println("您的成绩为:良好");
break;
case 'C' :
System.out.println("您的成绩为:及格");
case 'D' :
System.out.println("您的成绩为:不及格");
default:
System.out.println("未知等级");
}
}
}
//输出结果
您的成绩为:及格
您的成绩为:不及格
未知等级
switch与if不同点
if适用于区间,而switch适用于确认某个具体的值
反编译
Java文件
public class Demo03 {
public static void main(String[] args) {
//JDK7新特性,可以支持字符串
//字符的本质还是数字
//反编译技术 java----class(字节码文件)----反编译(可以用idea)
String name = "开心";
switch (name){
case "凯鑫" : System.out.println("凯鑫");
break;
case "开心" : System.out.println("开心");
break;
default:
System.out.println("弄啥嘞");
}
}
}
会自动生成一个class文件,用idea打开得到
hashcode方法,每一个对象都有一个hashcode,系统自动生成的,可以理解为数字
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
public class Demo03 {
public Demo03() {
}
public static void main(String[] args) {
String name = "开心";
byte var3 = -1;
switch(name.hashCode()) {
case 688220:
if (name.equals("凯鑫")) {
var3 = 0;
}
break;
case 778435:
if (name.equals("开心")) {
var3 = 1;
}
}
switch(var3) {
case 0:
System.out.println("凯鑫");
break;
case 1:
System.out.println("开心");
break;
default:
System.out.println("弄啥嘞");
}
}
}