2014-11-10 3 views
0

У меня вопрос об объектах в инструкции switch. Я знаю, что переменные, используемые в case case, должны быть окончательными (иначе мы получим: «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

На каком языке это? Похоже, это Java, но я не уверен. – GoBusto

+0

В нем говорится, что Java, вероятно, есть ;-) –

+1

Как вы понимаете «Wrapper» в этом контексте? не могли бы вы привести нам пример? – ha9u63ar

ответ

3

Ваша переменная i является ссылкой на объект Integer.

Объект Integer неизменен.

Переменная i сама по себе является изменчивым ссылкой на объект. Это не постоянная переменная , которая должна быть окончательной и иметь примитивный тип или тип String.

EDIT: Наконец-то нашли ссылки в Спецификации языка 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).

+0

Вы правы, теперь я это вижу. Благодарю. – jarosik

0

Упаковщики разрешены, но вы должны использовать включение случае различать значения переменной, а не между переменными сами по себе, т.е.

Integer i = 8; 
    final int x = 10; 

    switch (i) 
    { 
    case (10): 
     System.out.println("x"); 
     break; 
    case (8): 
     System.out.println("i"); 
     break; 
    } 

Это не делает много смысла, хотя, но это должно быть возможным и, надеюсь, объясняет вам использование.

Смежные вопросы