Подтвердить что ты не робот

Котировки

С Java я читаю книгу, чтобы перекрыть основы, которые я забыл в колледже, и они показывают мне инструкцию swtich:

void helpon(int what) {
    switch(what) {
        case '1': break;
        case '2': break;
    }
}

Я пропустил код кода, потому что неактуальен.

Однако мне показалось странным использовать int и по-прежнему обертывать операторы case в одинарных кавычках, поэтому я перешел к oracle docs и нашел пример, аналогичный приведенному выше примеру, но без кавычек.

У кавычек вопрос для оператора switch, который использует целые числа в качестве примера? Почему '1' работает, если what является int и '1' является char?

4b9b3361

Ответ 1

Одиночные кавычки являются буквальными char и char значениями в значениях int. A char может быть представлен как int из его значения UTF-16, например:

char c = '1';
int i = c;
System.out.println(i);

Вывод:

49

Дополнительная информация:


Не путайте символы ASCII (один байт, значение от 0 до 127) и UTF-16 (2 байта на кодовую точку, значение от 0 до 65535). Дополнительная информация: Unicode, UTF, ASCII, различия в формате ANSI

Ответ 2

Я просто хочу добавить некоторую глубину. Да '1' - это char of 1, который хранится как int valu e, поэтому вы можете использовать int в char (одиночные кавычки - это другой способ сделать это). Однако char хранится как диапазон с максимальным 65535 (Java - utf-16, я считаю так 2 ^ 16). Вы не можете иметь отрицательное значение int в char без кастинга и литья, что даст нечетный символ. Значение, большее, чем диапазон, является проблемой.

Переключатель примет следующий int, char, short, byte (все, что подходит в int), и с SE7 a String. В принципе, примитивы и объект String приемлемы. Вы можете превратить примитив в объект, такой как Integer, Character, Short, Byte.

Технически с char вы можете использовать либо int внутри диапазона, либо char для случая, если вы проверяете правильную вещь.

С int следует использовать все, что автоматически вписывается в int. Литье в параметре переключателя приводит к потере точности.

Для хорошей меры, не забудьте сломать или провалиться. Кроме того, операторы case должны быть константами, определяемыми во время компиляции, либо арифметикой известных и приемлемых примитивов, известного примитива с использованием окончательного модификатора, либо константы с прямой кодировкой.

Ответ 3

Символы "1" и "2" в этой помощи интерпретируются как их значение UTF-16. Итак, "1" действительно оценивается как 49, "2", как 50, и так далее.

Мне нужно больше rep для публикации фотографий, но здесь ASCII-код. http://asciiset.com/asciitable.gif.

Ответ 4

char будет преобразован в UTF-16, а затем он будет сравниваться. Также после Java7 вы также можете записать String в случаях переключения.