switch语句中的包装器

时间:2014-11-10 18:16:34

标签: java switch-statement wrapper

我对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;
    }

2 个答案:

答案 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)。

常量变量由4.12.4: final variables

定义
  

常量变量是基本类型或类型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;
    }

虽然这没有多大意义,但它应该是可能的,并希望向您解释使用方法。