Юридические и нелегальные идентификаторы [дубликаты]

Я думаю, что apache обеспечивает лучший класс util, который предоставляет функцию для получения строки

ReflectionToStringBuilder.toString(object)
10
задан pap 12 October 2012 в 11:48
поделиться

3 ответа

Это не так - многие специальные символы действительно действительны для идентификаторов. Он определен в JLS # 3.8 :

Идентификатор представляет собой неограниченную последовательность букв Java и цифр Java, первая из которых должна быть буквой Java , [...] «Письмо Java» - это символ, для которого метод Character.isJavaIdentifierStart(int) возвращает true. «Буква или цифра Java» - это символ, для которого метод Character.isJavaIdentifierPart(int) возвращает значение true.

Например, это допустимое имя переменной:

String sçèêûá¢é£¥ = "bc";

Вы можете увидеть все допустимые символы с помощью этого простого кода:

public static void main(String args[]) {
    for (int i = 0; i < Character.MAX_VALUE; i++) {
        if (Character.isJavaIdentifierPart(i)) {
            System.out.println("i = " + i + ": " + (char) i);
        }
    }
}

ps: хорошие примеры в блоге @ PeterLawrey

18
ответ дан assylias 27 August 2018 в 03:56
поделиться

Следующий код действителен в Java ...

int Δ = 1;
double π = 3.141592;
String 你好 = "hello";
Δ++;
System.out.println(Δ);

Я бы сказал, что это довольно специальные символы для имен переменных.

Источник: http : //rosettacode.org/wiki/Unicode_variable_names#Java

7
ответ дан david99world 27 August 2018 в 03:56
поделиться

На самом деле существует огромное количество специальных символов, которые разрешены в идентификаторах Java, как есть. Например, вы можете иметь каждый символ валюты и все 10 символов продолжения (а не только _)

if( ⁀ ‿ ⁀ == ⁀ ⁔ ⁀ || ¢ + ¢== ₡)

Еще более странно вы можете иметь символы, которые невидимы или заставить текст печататься назад.

Следующая программа имеет \u202e в своих идентификаторах, что приводит к ее «специальному» виду.

for (char c‮h = 0; c‮h < Character.MAX_VALUE; c‮h++)
    if (Character.isJavaIdentifierPart(c‮h) && !Character.isJavaIdentifierStart(c‮h))
        System.out.printf("%04x <%s>%n", (int) c‮h, "" + c‮h);

Это печатает все специальные символы, разрешенные в идентификаторе, который компилируется и запускается.

http://vanillajava.blogspot.co.uk/2012/09/hidden-code.html

http: // vanillajava. blogspot.co.uk/2012/08/uses-for-special-characters-in-java-code.html

15
ответ дан Peter Lawrey 27 August 2018 в 03:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: