Компилятор может распознавать экранирование Unicode и переводить их в UTF-16. ch\u0061r
станет char
, что является допустимым типом примитива. Это делает правильный вариант D.
Компилятор для языка программирования Java («Java-компилятор») сначала распознает экранирование Unicode на своем входе, переводя символы ASCII \ u, за которыми следуют четыре шестнадцатеричных цифры, в кодовую единицу UTF-16(§3.1) для указанного шестнадцатеричного значения и передачи всех остальных символов без изменений.
\u0061
будет преобразовано в a
, которая является допустимой буквой Java, которую можно использовать для формирования идентификатора,Это делает правильный вариант C.
Идентификатор представляет собой последовательность букв Java и цифр Java неограниченной длины, первая из которых должна быть буквой Java.
Identifier:
IdentifierChars but not a Keyword or BooleanLiteral or NullLiteral
IdentifierChars:
JavaLetter {JavaLetterOrDigit}
JavaLetter:
any Unicode character that is a "Java letter"
JavaLetterOrDigit:
any Unicode character that is a "Java letter-or-digit"
«Буква Java» - этосимвол, для которого метод Character.isJavaIdentifierStart(int)
возвращает true
.
"Буква или цифра Java" - это символ, для которого метод Character.isJavaIdentifierPart(int)
возвращает true
.
«Java-буквы» включают прописные и строчные латинские буквы ASCII AZ (\u0041-\u005a
) и az (\u0061-\u007a
), а по историческим причинам - знак доллара ASCII ($
или \u0024
) и подчеркивание (_
или \u005f
). Знак доллара следует использовать только в механически сгенерированном исходном коде или редко для доступа к ранее существующим именам в устаревших системах. Подчеркивание может использоваться в идентификаторах, состоящих из двух или более символов, но его нельзя использовать в качестве односимвольного идентификатора, поскольку оно является ключевым словом.