记switch的一个坑

当初学习java的时候只是大概记得switch可以接受整形,枚举类型和String类型(java7),因为平时用的并不是太多,所以没有进行过深入的研究。
今天就遇到了一个这方面的问题,所以有必要把switch可以接受的参数总结一下。
首先由byte登场,

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

        byte x = 2;
        switch(x){
            case 1 : 
            System.out.println("case1");
            break;
            case 2 : 
            System.out.println("case2");
            break;
            case 3 : 
            System.out.println("case3");
            break;
            case 4 : 
            System.out.println("case4");
            break;

        }

然后是short类型

short x = 2;
        switch(x){
            case 1 : 
            System.out.println("case1");
            break;
            case 2 : 
            System.out.println("case2");
            break;
            case 3 : 
            System.out.println("case3");
            break;
            case 4 : 
            System.out.println("case4");
            break;

还有int类型

int x = 2;
        switch(x){
            case 1 : 
            System.out.println("case1");
            break;
            case 2 : 
            System.out.println("case2");
            break;
            case 3 : 
            System.out.println("case3");
            break;
            case 4 : 
            System.out.println("case4");
            break;

再来试试char类型

char x = 1;
        switch(x){
            case 1 : 
            System.out.println("case1");
            break;
            case 2 : 
            System.out.println("case2");
            break;
            case 3 : 
            System.out.println("case3");
            break;
            case 4 : 
            System.out.println("case4");
            break;

他们的执行结果都是符合预期的,会进入case2.
然而问题出现在了long类型上,

    long x = 2;
        switch(x){
            case 1L : 
            System.out.println("case1");
            break;
            case 2L : 
            System.out.println("case2");
            break;
            case 3L : 
            System.out.println("case3");
            break;
            case 4L : 
            System.out.println("case4");
            break;
  Test.java:6: 错误: 不兼容的类型: 从long转换到int可能会有损失
                switch(x){

这说明switch()只可以接受int或者能够自动提升为int类型的类型,对于大于int类型的long自然就是拒绝的了。

还有boolean类型,我也做了一下实验

    boolean x = false;
        switch(x){
            case true : 
            System.out.println("case1");
            break;
            case false : 
            System.out.println("case2");
            break;
Test.java:6: 错误: 不兼容的类型: boolean无法转换为int

结果也是不可以的

同样的对于浮点型也会出现类似的错误

 不兼容的类型: 从float转换到int可能会有损失
 不兼容的类型: 从double转换到int可能会有损失

所以说switch能够接受的参数只有byte、char、short、int、枚举、String(java7)这几种。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值