4.5 Switch选择结构

4.5 Switch选择结构

  • 多选择结构还有一个实现方式就是switch case语句

  • switch case语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。

  • switch 语句中的变量类型可以是:

    1. byte、short、int或者char
    2. 从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中即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值