我对switch语句中的对象有疑问。 我知道case子句中使用的变量必须是final(否则我们得到:" case表达式必须是常量表达式")。 最终对象意味着只能更改引用,该值仍然可以通过其他非最终引用更改,因此,我们无法在' case'中使用对象。 但为什么我们不能使用包装纸?他们是不变的吗?
java代码:
Integer i = 8;
final int x = 10;
switch ( x )
{
case x:
System.out.println("x");
break;
case i:
System.out.println("i");
break;
}
答案 0 :(得分:3)
您的变量i
是对Integer对象的引用。
Integer对象是不可变的。
变量i
本身是对象的可变引用。它不是常量变量,它必须是final的,并且是原始类型或String类型。
编辑:最后在Java语言规范中找到了引用。
首先,根据14.11: The switch statement
,开关标签可以包含枚举或常量表达式SwitchLabel:
case ConstantExpression :
case EnumConstantName :
default :
15.28: Constant expressions中定义了一个常量表达式。这种情况下的相关项目是:
定义引用常量变量的简单名称(第6.5.6.1节)(§4.12.4)。
常量变量是基本类型或类型String的最终变量,使用常量表达式初始化(第15.28节)。
答案 1 :(得分:-1)
允许使用包装,但是你应该使用 switch-case 来区分变量的值,而不是变量本身之间,即
。 Integer i = 8;
final int x = 10;
switch ( i )
{
case (10):
System.out.println("x");
break;
case (8):
System.out.println("i");
break;
}
虽然这没有多大意义,但它应该是可能的,并希望向您解释使用方法。