JDK1.7后为什么Switch能对String字符串类型提供支持及原理

JDK1.7之后,switch提供了对String字符串的支持,而在我们印象之中,Switch只提供byte,char,short,int类型的常量表达式的支持,为什么JDK7之中能对String字符串对象使用呢?抱着这个疑问,就有了本文。

​ 首先,让我们看一下一般情况下Switch语句写法:

int num = 1;
switch (num) {
    case 2:
        System.out.println(2);
        break;
    case 1:
        System.out.println(1);
        break;
    default:
        break;
}

​ 反编译后:

int a = 5;
switch(a) {
    case 2:
        System.out.println(2);
        break;
    case 1:
        System.out.println(1);
        break;
}

再看看String字符串下的:

String str = "lby";
switch (str) {
    case "dcy":
        System.out.println("dcy");
        break;
    case "lby":
        System.out.println("lby");
        break;
    default:
        break;
}

反编译后:

String str = "lby";
String s;
switch((s = str).hashCode()) {
    default:
        break;
    case 99290:
        if(s.equals("dcy"))
            System.out.println("dcy");
        break;
    case 106947:
        if(s.equals("lby"))
            System.out.println("lby");
        break;
}

​ 经过上面我们可以发现,Switch对String类型支持是经过hashCode转换成int类型再进行判断的,并且,为了防止发生Hash值相同情况,还采用了equals方法对字符串进行比较。

​ 其实可以试验一下其他类型,本质都是转换成int类型进行比较,而对于超过int范围,如long类型,switch则不提供支持。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值