栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

推荐switch-case语句使用枚举来判断

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

推荐switch-case语句使用枚举来判断

推荐switch-case语句使用枚举来判断
  • 1 switch-case简介
  • 2 switch-case案列
  • 3 关于switch-case和if-else的比较

Java中switch-case语句主要用来做条件分支的判断,判断一个变量与一系列的值做相等匹配,每个值都属于一个分支.

1 switch-case简介

语法

switch(expression){
    case value :
       //语句
       break; //可选
    case value :
       //语句
       break; //可选
    //...
    default : //可选
       //语句
}

说明:

  • 1 switch语句中expression支持的类型为: byte,short,int,char,String,枚举, 但是不支持表达式 如num>0
  • 2 switch语句可以有多个case语句, 但是每个case后面要有一个比较值和冒号
  • 3 switch语句遇到break会终止语句. 每个case的语句后break为可选, 如果没有break,会造成穿透效果,即执行后续所有的case语句,直到遇到break语句.
  • 4 switch语句中可以添加一个默认分支default. 放置位置没有规定,一般放在最后.当所有分支条件都不满足时,才会走到默认分支,且此分支不需要break语句.
2 switch-case案列
public class switchDemo {
    
    public static void main(String[] args) {

        
        intTest('A');

        
        intTest('B');
    }

    public static void intTest(char grade) {
        switch (grade) {
            case 'A':
                System.out.println("优+");
                break;
            case 'B':
                System.out.println("优");
            case 'C':
                System.out.println("良");
                break;
            case 'D':
                System.out.println("及格");
                break;
            case 'F':
                System.out.println("不及格");
                break;
            default:
                System.out.println("未知等级");
        }
        System.out.println("你的等级是 " + grade);
    }
    
}

从控制台输出的结果可以得知, A等级表示优+. B等级为优, 因为没有break语句,造成穿透,把等级为C的语句也执行了.

使用枚举类作为条件

在使用switch中,通常建议使用枚举来替代字符串等变量的比较, 主要是方便后期维护和新增,使得代码规范性更好.

下列使用枚举方案来替代:

1 新建一个枚举类

public enum ScoreEnum {

    EXCELLENTPLUS('A', "优+"),
    EXCELLENT('B', "优"),
    GOOD('C', "良"),
    PASS('D', "及格"),
    FAIL('E', "不及格"),
    UNKNOWN('N', "未知等级");

    private Character rank;
    private String message;


    public static ScoreEnum getByRank(Character rank) {
        for (ScoreEnum scoreEnum : ScoreEnum.values()) {
            if (scoreEnum.rank.equals(rank)) {
                return scoreEnum;
            }
        }
        return UNKNOWN;
    }


    ScoreEnum(Character rank, String message) {
        this.rank = rank;
        this.message = message;
    }


    public Character getRank() {
        return rank;
    }

    public void setRank(Character rank) {
        this.rank = rank;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

2 替换switch比较条件

    public static void intEnumTest(char grade) {

        ScoreEnum scoreEnum = ScoreEnum.getByRank(grade);
        switch (scoreEnum) {
            case EXCELLENTPLUS:
                System.out.println("优+");
                System.out.println(scoreEnum.getMessage());
                break;
            case EXCELLENT:
                System.out.println("优");
                System.out.println(scoreEnum.getMessage());
            case GOOD:
                System.out.println("良");
                System.out.println(scoreEnum.getMessage());
                break;
            case PASS:
                System.out.println("及格");
                System.out.println(scoreEnum.getMessage());
                break;
            case FAIL:
                System.out.println("不及格");
                System.out.println(scoreEnum.getMessage());
                break;
            default:
                System.out.println("未知等级");
                System.out.println(scoreEnum.getMessage());
        }
        System.out.println("你的等级是 " + grade);

    }

3 比较同样的结果

    public static void main(String[] args) {
        
        
        intEnumTest('A');

        
        intEnumTest('B');
    }
3 关于switch-case和if-else的比较

1 关于效率.当分支条件多时,switch-case效率较高. 因为在编译时switch-case会生成一个跳转表,来指向实际的case分支地址,跳转表的索引号和switch变量相等的,所以switch-case只需要通过访问对应索引号的项从而达到定位分支. 而if-else结构需要遍历所有的条件分支,直到找到符合条件的.(switch-case像用空间换时间的算法)

2 关于适用范围.switch-case仅在常量选择分支时使用,对于变量表达式,如(num>10 || num<5)等等,不能实现功能,所以相比来说,if-else的使用范围更广,适用的场景更多.

参考资料:

https://www.runoob.com/java/java-switch-case.html

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/424048.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号