下面代码会报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语句也就编译成功了。
网友评论