Как неконечные переменные могут быть константами переключения?

public class SwitchTest {

public static void main(String[] args) {
    Integer i = new Integer(2) + new Integer(2);

    switch(i){
      case 4: System.out.println("foo"); break;
      default: System.out.println("default"); break;
    }
  }
}

Целое число i не помечено как окончательное. (Я только новичок в java.)


person Codistan    schedule 23.12.2014    source источник
comment
i здесь не константа переключателя, это включаемая переменная. Он включит текущее значение, как if.   -  person lmm    schedule 23.12.2014
comment
Параметры переключения не обязательно должны быть окончательными. что-то не так в вашей среде.   -  person Rami Del Toro    schedule 23.12.2014
comment
Вы также можете написать: switch(new Random().nextInt()) без проблем. Но вы не можете написать case new Random().nextInt():, потому что каждому case нужна константа времени компиляции.   -  person Tom    schedule 23.12.2014


Ответы (1)


Вы путаете case метки с switch операндами.

Нет ничего плохого в switching непостоянного значения; на самом деле, без этого switch был бы практически бесполезен.

person SLaks    schedule 23.12.2014