java char '\ 249' "не утверждение" и "не закрытый буквенный символ" - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть следующий код:

char c = '\249';

IDEA подчеркивание '\ 249' с «Слишком много символов в буквальном символе» сообщение.И когда я попытался запустить код, я получил "не утверждение" и "незаполненный буквенный символ" ошибки.

Почему это происходит?

В то же время '\ 250' отлично работает буквально.

Насколько я понимаю, мы можем использовать конструкцию '\' для установки char с помощью кода ASCII, верно?

Также я сравнил выходные данные:

c1 = '\63'; //3
c2 = 63; // ?

Они разные и '?'верно.Так для чего используется конструкция '\' ?

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

' используется для цитирования значения char.

A \ в буквенном символе используется для определения OctalEscape и должно сопровождаться1-3 восьмеричные цифры (0-7).

Таким образом, с '\249', 9 не является восьмеричной цифрой, что означает, что \24 является одним (экранированным) символом, а 9 являетсядругой символ и буквенный символ не может иметь 2 символа, поэтому он недопустим.

'\250' является действительным восьмеричным экранированием для символа 250 (восьмеричное) / 168 (десятичное число) / A8 (шестнадцатеричное), которое являетсяСимвол Unicode 'DIAERESIS' (U + 00A8) , он же ¨

0 голосов
/ 07 февраля 2019

В Java в строковом литерале или символьном литерале вы можете указать символ с восьмеричным экранированием , управляемым JLS, раздел 3.10.6 .

OctalEscape:

\ OctalDigit

\ OctalDigit OctalDigit

\ ZeroToThree OctalDigit OctalDigit

Восьмеричные цифры - это цифры от 0 до 07. Экранирующая последовательность \249 недопустима, поскольку 9 не является восьмеричной цифрой, а экранирующая последовательность \250 является допустимой, поскольку она соответствует 3-му результату, описанному выше.

Когда вы установите charна \63, то есть на номер Unicode 51, который равен '3'.Если для char установлено значение 63, это будет символ Unicode 63, то есть '?'.

...