Во всех книгах по Java я читал, что компилятор обрабатывает все пробелы одинаково и просто игнорирует лишние пробелы, поэтому рекомендуется использовать их свободно для улучшения читаемости кода.Я нашел подтверждение этому в каждом написанном мной выражении: не имело значения, были ли пробелы или нет, и сколько (или, может быть, я просто не обращал внимания).
Недавно я решил немного поэкспериментировать с приоритетом операторов и ассоциативностью, чтобы протестировать таблицу приоритетов в действии, и попытался скомпилировать
int a = 2;
int b = 3;
int c = a+++b;
int d = a+++++b;
В то время как первый оператор компилировался отлично, последний выдает исключение:
Исключение в потоке "main" java.lang.RuntimeException: некомпилируемый исходный код - непредвиденный тип.Обязательно: переменная.Найдено: значение.
Однако, когда я добавил пробелы: int d = a++ + ++b
, оно скомпилировалось.Почему это так?Говорят, что Java все равно игнорирует лишние пробелы.(У меня есть Java 8 и Netbeans IDE 8.2, если это имеет значение.)
Я думаю, это может иметь какое-то отношение к анализу выражений, но я не уверен.Я попытался найти несколько вопросов о разборе, пробелах и операторах в SO и Google, но не смог найти однозначного ответа.
UPD.Чтобы ответить на комментарии о том, что «дополнительные» имеют значение, а не все пробелы: поскольку int c = a++ + b;
и int c=a+++b;
оба компилируются, можно сказать, по аналогии, что в int d = a ++ + ++b;
пробелы также являются «дополнительными».