java中switch case语句类型不匹配的错误问题

前言

Java中switch语句作用在long类型上会报错Error
(java: 不兼容的类型)
(constant label of type long is not compatible with switch)

switch case语句分析


switch (变量){
    case:变量1 java语句;break;
    case:变量2 java语句;break;
    case:变量3 java语句;break;
            ……
    default:java语句;
}

Jdk对于变量i ii 的限定为:可以表示int类型的或者String类型的字面值或变量
byte、short、char具有特权,就是如果赋值给他们的整形字面值在取值范围之内,是可以直接赋值的,所以这就意味着,参数可以是byte,short,char类型的变量
switch(变量)其中表达式的值必须是以下几种类型之一:int,byte,char,short,String。
这也就意味着,如果参数传入一个更大的参数类型或者不兼容的参数类型,有可能会报错且损失精度,但是如果符合您的需求,可以通过强制类型转换符”( )”来进行类型的转换,可以解决编译时的报错问题。

Scanner in=new Scanner(System.in);
        long data=in.nextInt();
        switch (data) {
            case 0:
            case 1:
            case 2:System.out.println(data);
            case 3:
            case 4:
            case 5:System.out.print(data+1);
        }
        /*
        xxx.java:418:16
java: 不兼容的类型: 从long转换到int可能会有损失
        */

下面是经过强制类型转换,注意是在switch后面转,而不是在case后面。

    Scanner in=new Scanner(System.in);
        long data=in.nextInt();
        switch ((int)data) {
            case 0:
            case 1:
            case 2:System.out.println(data);
            case 3:
            case 4:
            case 5:System.out.print(data+1);
        }

switch case深入浅出

对于不同的类型,Jvm虚拟机在执行的时候到底是如何比较的,我们可以将.java源文件编译成的.class文件进行查看。
可以发现char类型的变量在比较的时候是直接转化为相应的ASCII码值,而String类型的变量是调用了其内部的hashCode()方法,转化为了hash码。


版权声明:本文为cillian_bao原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。