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

Имена переменных Java Unicode

Я познакомился с интересной дискуссией на форуме, где мы обсуждали имена переменных.

В противоположность этому, я заметил, что для переменной имеет значение имя символа Юникода, например, допустимо следующее:

int \u1234;

Однако, если я, например, дал ему имя #, он вызывает ошибку. Согласно Sun tutorial, это действительно, если "начинаться с буквы, знака доллара" $"или символа подчеркивания" _ "."

Но юникод 1234 является некоторым эфиопским персонажем. Итак, что действительно определено как "письмо"?

4b9b3361

Ответ 1

Стандарт Unicode определяет, что считается буквой.

Из Спецификация языка Java, раздел 3.8:

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

а "Java letter" - символ, для которого метод Character.isJavaIdentifierStart(целое) возвращает true. "Буква или цифра Java" является символом, для которого метод Character.isJavaIdentifierPart(целое) возвращает true.

Из документа Character для isJavaIdentifierPart:

Определяет, может ли символ (кодовая точка Юникода) быть частью идентификатора Java, как другой чем первый символ. Символ может быть частью идентификатора Java, если выполняется одно из следующих условий:

  • это письмо
  • это символ валюты (например, $$)
  • это связующий символ пунктуации (например, "_" )
  • это цифра
  • это числовая буква (например, римский цифровой символ)
  • это комбинирующий знак
  • это знак без пробела
  • isIdentifierIgnorable (codePoint) возвращает true для символа

Ответ 2

Символы Unicode попадают в классы символов. Там набор символов Юникода, которые попадают в класс "письмо".

Определяется Character.isLetter(c) для Java. Но для идентификаторов более важны Character.isJavaIdentifierStart(c) и Character.isJavaIdentifierPart(c).

Для соответствующей спецификации Юникода см. this.