Java switch语句出现case expressions

2019-05-25  本文已影响0人  小的橘子

下面代码会报case expressions must be constant expressions错误

class A {
    public static final int NUM = 2 + new Random().nextInt(2);

    static {
        System.out.println("A static block NUM=" + NUM);
    }
    public static void test(){
        int number = 2;
        switch (number){
            case NUM: // 该句就会报如上错误
        }
    }
}

case语句要求的是常量,我们会想NUM声明的就是常量啊,我们需要知道case需要的常量要在编译时确定,但是NUM在编译期间没法确定,故报错。

如果NUM改为public static final int NUM = 2 + 3报错就会消失,虽然也是表达式,但是2和3都是字面值,编译器会进行常量折叠,从而编译器可以确定具体值,那么case语句也就编译成功了。

上一篇 下一篇

猜你喜欢

热点阅读