记switch的一个坑

来源:互联网 发布:创维酷开软件下载 编辑:程序博客网 时间:2024/05/16 05:41

当初学习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)这几种。

0 0