为什么最终字节作为switch语句中的一个案例不能编译?

pai*_*dly 3 java constants switch-statement

byte a = 125;
final byte b = 2;
final Byte c = 3;
switch (a) {
case b: // works fine
    break;
case c: // Constant Expression required
    break;
}
Run Code Online (Sandbox Code Playgroud)

既然cfinal变量,它不是编译时常量,因此是有效的案例标签吗?

Jon*_*eet 5

由于c是最终变量,因此它不是编译时常量

否.常量表达式的规则在JLS 15.28中给出,它们不包括包装器类型:

常量表达式是表示基本类型的值的表达式或不突然完成的字符串,仅使用以下[...]组成.

包装器类型既不是基本类型也不是String.