有这样的代码,一切正常。
public static void main(String[] args) {
final int num = 0;
switch (num) {
default:
System.out.println("default");
case num: //нет проблем
System.out.println("case1");
case 10 * 2 - 10:
System.out.println("case2");
break;
}
}
但这样的即兴创作是值得的
public static void main(String[] args) {
final int num;
num = 0;
switch (num) {
default:
System.out.println("default");
case num: // Constant expression required
System.out.println("case1");
case 10 * 2 - 10:
System.out.println("case2");
break;
}
}
瞧……有一个错误。
有趣的是,如果 final 字段在声明时没有初始化,那么它就不再是 final 了。
我要澄清一下:我尝试在一次后期初始化之后再次初始化,看看是否可以通过某种魔法多次初始化 final 字段。最后,不,一切都很好。您只能初始化一次。
那么,交换机在什么基础上不将传递的值识别为最终值?
编译器需要
case在编译时知道 -s 中指定的值。对于初始化final变量(常量) - 满足此要求。对于在运行时可以取任何值的变量,不。