Почему унарные операторы не могут работать напрямую со значениями в 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