Почему унарные операторы не могут работать напрямую со значениями в Java?

Не то чтобы я этого хотел, но мне интересно, почему унарные операторы не работают напрямую со значениями в Java?

Почему result++; работать, если int result = 0; но result = 0++; не работа?

Все, что я могу найти в docs является то, что унарный оператор требует только один operand, но нет четкого определения операнда, и кажется, что это может быть либо переменная, либо значение.

1 ответ

Решение

Нельзя сказать, что унарные операторы не работают - например, -(+(-5)) - это хорошо.

Но ++ не просто вычисляет значение - его целью является увеличение переменной. 0 не является переменной.

От JLS 15.14.2 (постфиксный оператор приращения ++)

Результатом выражения postfix должна быть переменная типа, который может быть преобразован (§5.1.8) в числовой тип, иначе произойдет ошибка времени компиляции.

Обратите внимание, что речь идет не только о литералах. Вы не можете сделать:

String x = "foo";
x.length()++; // wrong!

потому что опять x.length() не классифицируется как переменная.

Но вы можете использовать другие унарные операторы, например,

String x = "foo";
int y = -x.length(); // Unary - operator... that's fine
Другие вопросы по тегам