JDK语法糖之switch字串与枚举支持

在JDK1.7之前,switch只支持byte,short,char,int,注意1.5之后的自动拆箱,对应的这四种基础类型的封装类也同样支持Byte,Short,Character,Integer,比如,对于代码:

    switch (new Integer(5)) {
            case 5:
                System.out.println("5");
                break;
            default:
                System.out.println("0");
        }

JVM编译后进行了拆箱操作:
这里写图片描述
JDK1.7之后支持String类型和枚举类型的判断,注意这是JVM引入的一种语法糖,我们看下是如何支持String类型判断的,编写代码如下 :

public class GrammarSugar {
    public static void main(String[] args) {

        String choice = "A";
        switch (choice) {
            case "A":
                System.out.println("A");
                break;
            case "B":
                System.out.println("B");
                break;
            default:
                System.out.println("C");
        }

    }
}

我们使用javap看下编译好的字节码如下,我们可以看到,JVM编译器判断的其实是String的hashCode
这里写图片描述

而对于枚举:

        GRADE grade = GRADE.A;
        switch (grade) {
            case A:
                System.out.println("Excellent");
                break;
            case B:
                System.out.println("Good");
                break;
            case C:
                System.out.println("Not bad");
                break;
            case D:
                System.out.println("Not good");
                break;
            case F:
                System.out.println("Awful");
                break;
            default:
                System.out.println("unknown");
        }

反编译后的代码:
这里写图片描述
switch判断的是枚举类的ordinal方法,即枚举值的序列值。

原文地址:https://blog.csdn.net/kangkanglou/article/details/79526569

转载于:https://www.cnblogs.com/LeesinDong/p/10835412.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值