В Java, почему я могу объявить переменную с именем «а», но не «1»? - PullRequest
0 голосов
/ 27 января 2010

Все нормально, когда я заявляю

String a;

но он говорит Синтаксическая ошибка на токене "1", недопустимый VariableDeclaratorId , когда я делаю это

String 1;

Почему это?

Ответы [ 8 ]

24 голосов
/ 27 января 2010

Ну, во-первых, потому что написано в Спецификации языка Java.

Но, может быть, этот пример поможет вам больше:

String 1 = "toto"
System.out.println(1 + 2)

Каким должен быть вывод?

7 голосов
/ 27 января 2010

Поскольку 1 также является значением (которое, помимо прочего, вы можете назначить), анализатор не может знать, что вы имеете в виду.

Рассмотрим следующий фрагмент:

int 1 = 10;
int a = 1; // what is the value of a ? 1 or 10?

Поэтому запуск имени переменной с номером не разрешен. Вместо этого вы можете использовать _1, если действительно хотите (учтите, что его трудно читать)

4 голосов
/ 27 января 2010

Правила для идентификаторов в спецификации языка Java указывают, что нельзя начинать идентификатор с числа.

3 голосов
/ 27 января 2010

Парсер не может отличить его от литерала int, поэтому он запрещен.

2 голосов
/ 27 января 2010

Не только парсер будет прилагать большие усилия, чтобы различать литерал int и переменную (если не полностью невозможен), но вы также можете столкнуться со странными ситуациями, такими как:

int 1 = 999;
System.out.println(1);

// output: 1 or 999

В принципе это не имеет особого смысла.

0 голосов
/ 27 января 2010

Это работает и на моей машине: public static void main (строковые аргументы []) {Строка l = "один"; } Я на jdk1.7

0 голосов
/ 27 января 2010

Потому что 1 это значение.Что кто-то из этого сделает:

String 1 = "6";
String s = 1 + "00";    // With value "100" or "600"?

Аналогично, true, false, null не могут быть именами переменных.

0 голосов
/ 27 января 2010

Я думаю, что вы можете. Он компилируется на моей машине.

...