(1) «a» - это значение ascii 97. Ascii - это стандартный способ кодирования символов, который также используется во многих других языках.По сути, каждый символ представлен в виде числового значения.Поэтому, когда у вас есть:
...
case 'a':
...
, вы фактически выполняете код ниже случая, если переменная переключателя равна 97. В вашем примере:
case '1':
проверяет, является ли переменная переключателяравно char '1', что равно значению ascii 49.
(2) Заключение оператора case в фигурные скобки изменяет область видимости переменных между фигурными скобками.Рассмотрим следующий пример:
switch (sw) {
case 1:
int b = 2;
sw += b;
break;
case 2:
int b = 3;
sw += b;
break;
default:
break;
}
Это потому, что в случае 1 и 2 вы создаете целое число с именем "b".Поскольку оба оператора case находятся в одной области переменных (область действия оператора switch), компилятор выдает ошибку, поскольку вы создаете экземпляр переменной с одинаковым именем и типом дважды.Теперь рассмотрим код ниже:
switch (sw) {
case 1: {
int b = 2;
sw += b;
break;
} case 2: {
int b = 3;
sw += b;
break;
} default: {
break;
}
}
Этот код компилируется.Заключив код каждого случая в фигурные скобки, вы даете каждому случаю собственную область видимости переменной, где он может переопределить одну и ту же переменную один раз в каждой области видимости.