多选择结构除了if多分支判断还有switch case语句。switch case语句判断一个变量与一系列值的某个值是否相等,每一个值称为一个分支。switch可以支持的变量类型有:byte、short、int、char从javaSE7开始switch开始支持String类型

if判断区间比较方便,而switch是匹配具体某一个值

switch语法格式:

switch(条件/表达式){
            case "值1":
                //执行的语句块1
                break;	//
            case "值2":
                //执行的语句块2
            case "值3":
                //执行的语句块3
            default:
            	//默认执行的。当所有条件都不满足时执行。相当于else

案例1 JDK7开始switch开始支持String类型

package Test_Demo;
import java.util.Scanner;
public class Demo13 {
    public static void main(String[] args) {
        System.out.print("请输入你的段位:");
        Scanner S=new Scanner(System.in);
        String s=S.next();
        switch(s){
            case "荣耀王者":
                System.out.println("荣耀王者好厉害!!!");
            case "最强王者":
                System.out.println("最强王者还可以...");
            case "至尊星耀":
                System.out.println("加油努力上个王者!");
            case "永恒钻石":
                System.out.println("老老实实在钻石呆着吧");
            case "尊贵铂金":
                System.out.println("额....还是别上组钻石了吧");
            case "荣耀黄金":
                System.out.println("幼儿园小朋都比你厉害!");
            case "倔强青铜":
                System.out.println("你刚下载的游戏吧?");
            default:
                System.out.println("你不会没有段位吧?小菜鸡");
        }
    }
}

执行结果:

请输入你的段位:最强王者
最强王者还可以...
加油努力上个王者!
老老实实在钻石呆着吧
额....还是别上组钻石了吧
幼儿园小朋都比你厉害!
你刚下载的游戏吧?
你不会没有段位吧?小菜鸡

输入的是“最强王者”可是除了荣耀王者所有的输出语句都输出出来了,这是因为case穿透造成的。在每个case后加个bleak;即可,break在if中作用是结束循环,在switch中是结束switch循环,continue的作用是结束本次循环继续执行下次循环

package Test_Demo;
import java.util.Scanner;
public class Demo13 {
    public static void main(String[] args) {
        System.out.print("请输入你的段位:");
        Scanner S=new Scanner(System.in);
        String s=S.next();
        switch(s){
            case "荣耀王者":
                System.out.println("荣耀王者好厉害!!!");
                break;
            case "最强王者":
                System.out.println("最强王者还可以...");
                break;
            case "至尊星耀":
                System.out.println("加油努力上个王者!");
                break;
            case "永恒钻石":
                System.out.println("老老实实在钻石呆着吧");
                break;
            case "尊贵铂金":
                System.out.println("额....还是别上组钻石了吧");
                break;
            case "荣耀黄金":
                System.out.println("幼儿园小朋都比你厉害!");
                break;
            case "倔强青铜":
                System.out.println("你刚下载的游戏吧?");
                break;
            default:
                System.out.println("你不会没有段位吧?小菜鸡");
                break;
        }
    }
}

执行结果:

请输入你的段位:至尊星耀
加油努力上个王者!

加入break之后只会匹配符合case值的语句块。如果不加入break;则会一直匹配。

java反编译

字符的本质还是数字

.java文件通过编译成功.class文件。class文件也叫字节码文件(人看不懂的,需要进行反编译),将class文件编译为.java文件。程序能运行一定是已经生成.class文件才能运行

Java compare多条件 java case 多个条件_System


字节码文件人是看不懂的

Java compare多条件 java case 多个条件_java_02

反编译工具:IDEA

将编译后的.class文件防止src的项目下即可

Java compare多条件 java case 多个条件_Java compare多条件_03


用IDEA打开即可查看.class文件的编译前源文件

Java compare多条件 java case 多个条件_Java compare多条件_04

反编译后的.class文件中源文件判断的是switch(s),.class文件判断的是hashcode。每一个对象都对应一个hashcode。switch通过hashcode来进行判断。case则是通过hashcode将条件判断为一个数值(每一个中文都有自己对应的哈希值),判断时判断hash与条件相不相同

如下图,case语句也类似if条件判断语句

Java compare多条件 java case 多个条件_Java compare多条件_05