Java中switch语句作用在long类型上报错Error:(12, 16) java: 不兼容的类型: 从long转换到int可能会有损失

  • Post author:
  • Post category:java




switch表达式的返回值

必须是下述几种类型之一:int, byte, char, short, String;



错误代码:

long a = 123L;
switch (a) {
	case 1:
	case n:
	...
}

提示错误:

Error:(12, 16) java: 不兼容的类型: 从long转换到int可能会有损失



我们看一下char类型
public class Demo1 {
    public static void main(String[] args) {
        char c = 'A';
        switch (c) {
            case 'a':
                System.out.println("a");
                break;
            case 'A':
                System.out.println("A");
                break;
        }
    }
}


class文件
public class Demo1 {
    public Demo1() {
    }

    public static void main(String[] args) {
        char c = 65;
        switch(c) {
        case 65:
            System.out.println("A");
            break;
        case 97:
            System.out.println("a");
        }

    }
}

可以看到char类型数据直接转为了int类型



看一下String
public class Demo1 {
    public static void main(String[] args) {
        String s = "Hello";
        switch (s) {
            case "Hello":
                System.out.println("Hello");
                break;
            case "World":
                System.out.println("World");
                break;
        }
    }
}


class文件
public class Demo1 {
    public Demo1() {
    }

    public static void main(String[] args) {
        String s = "Hello";
        byte var3 = -1;
        switch(s.hashCode()) {
        case 69609650:
            if (s.equals("Hello")) {
                var3 = 0;
            }
            break;
        case 83766130:
            if (s.equals("World")) {
                var3 = 1;
            }
        }

        switch(var3) {
        case 0:
            System.out.println("Hello");
            break;
        case 1:
            System.out.println("World");
        }

    }
}

显然它直接使用了hashCode()方法,返回了哈希码,还是转为int类型



结论

显然switch语句在使用时返回值会转为int类型, long类型容量大于int,强制转化会缺失精度,那float、double就更不能转int了。



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