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("未知等级");
        }
    }
}

输出结果:

image-20211130213935441

  • 样例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("未知等级");
        }
    }
}

输出结果:

image-20211130214707262

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

        }
    }
}

反编译:

  1. ctrl+shift+Alt+s打开struct窗口找到“Project compiler output”输出路径并在文件夹中打开找到class文件

  2. 右击项目文件"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输出相应的文字

posted @ 2023-08-18 15:58  努力学技术的小豪  阅读(46)  评论(0)    收藏  举报