【深入Java基础】 switch用String作参数

这里写图片描述

一般情况switch只能用int(或者Integer)做参数,但是jdk17及其之后可以用枚举、String、float以及double作参数。

- 为什么float和double不能做参数?

事实上switch case语句只能判断int类型的数据,在比它小的数据类型比如byte、short可以自动转换为int,而比它大的比如float和double无法自动转换为int,所以会报错。当然String也是不可以的。

- 为什么在jdk17之后就可以呢?

因为对于String、float和double做参数时,实际上是比较的他们的hashCode,hashCode是一个整数,这样就可以接收非int型的参数了。并没有对原有的switch作修改。

类似于这样:

      String s = "12";
        switch (s.hashCode())
        {
            case 1569://"12"的hashCode为1569
                System.out.println("yes");
        }

那么这个hashCode是怎么得到的呢?

转到String中hashCode()的源码:

     public int hashCode() {
        int h = hash;
        if (h == 0 && value.length > 0) {
            char val[] = value;

            for (int i = 0; i < value.length; i++) {
                h = 31 * h + val[i];
            }
            hash = h;
        }
        return h;
    }

它是由 h = 31 * h + val[i]来计算哈希地址。val为字符串对应的char数组。

例如”12”.hashCode() = 31 * 49 + 50 = 1569

>>>对下于hash,将在下一篇文章中学习讨论 >>>。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

勇敢牛牛_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值