使用switch时有哪些注意事项

        switch 语句用于多分支选择,在使用 switch(expr)时,expr 只能是一个枚举常量(内部
也是由整型或字符类型实现)或一个整数表达式,其中整数表达式可以是基本类型 int 或其对
应的包装类 Integer,当然也包括不同的长度整型,例如 short。由于 byte、short 和 char 类型的值都能够被隐式地转换为 int 类型,因此这些类型以及它们对应的包装类型都可以作为 switch
的表达式。但是,long、float、double、String类型不能够隐式地转换为 int 类型,因此它们不
能被用作 switch 的表达式。如果一定要使用 long、float 或 double 作为 switch 的参数,必须将其强制转换为 int 型才可以
,例如,以下对 switch 中参数的使用就是非法的。

 float a= 0.123;
        switch(a)//错误,a不是整型或字符型变量
        {
            ...
        }

另外,与switch对应的是case语句,case语句之后可以是直接的常量数值,例如1,2 也可以是一个常量计算式,例如1+2等,还可以是final型的变量(final变量必须是编译时的常量),如final int a=0,但不能为变量或带有变量的表达式,如 i * 2等。更不能是浮点型数如1.1,1.2/2.等。

        switch 对字符串的支持,其实是 int类型值的匹配。它的实现原理如下
通过对 case 后面的 Siring 对象调用 hashCode()方法,得到一个 int 类型的 hash 值,然后用这个
thash 值来唯一标识这个 case。那么当匹配时,首先调用这个字符串 hashCode()函数,获取
一个 hash 值(int 类型),用这个 hash 值来匹配所有 case,如果没有匹配成功,说明不存在;
如果匹配成功了,接着会调用字符串的 Siring. equals()方法进行匹配(至于为什么需要调用 e-
quals()方法。由此可以看出,String 变量不能为 null,同时,switch的
case 子句中使用的字符串也不能为 null。
        在使用 switch 时,需要注意另外一个问题:一般必须在 case 语句结尾添加 break 语句。因
为一旦通过 switch 语句确定了入口点,就会顺序执行后面的代码,直到遇到关键字 break。否
则,会执行满足这个 case 之后的其他 case 的语句而不管 case 是否匹配,直到 switch 结束或者
遇到 break 为止。如果在 switch 中省略了 break 语句,那么匹配的 case 值后的所有情况(包括
default 情况)都会被执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

纳什1

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

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

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

打赏作者

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

抵扣说明:

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

余额充值