Java方法编译失败:为何允许newName却禁止lastName作为switch case标签?
为什么
newName能作为switch的case标签而lastName不行? 这个问题的核心在于Java对switch语句中case标签的严格要求——它们必须是编译时常量表达式,咱们来拆解两个变量的区别:
对于
final String newName = "John";:
这个变量被声明为final,并且在声明时直接用字符串字面量"John"完成了初始化。编译器在编译阶段就能确定它的值永远不会改变,完全符合编译时常量的定义,所以可以合法地作为switch的case标签使用。对于
final String lastName:
它是方法的入参,虽然加上了final修饰符(保证在方法内部无法被重新赋值),但它的具体值是在方法被调用时才传入的。编译器在编译这段代码时根本无法预知lastName的实际值,因此它不属于编译时常量,自然不能作为switch的case标签。
简单总结:switch的case标签要求是编译阶段就能确定固定值的表达式,而方法参数这类运行时才确定值的变量,哪怕被标记为final,也不满足这个要求。
内容的提问来源于stack exchange,提问作者Doug
相关产品推荐
相关产品推荐

