i++
- это назначение переменной i
.
В вашем случае zero++
является эквивалентом zero = zero + 1
. Таким образом, 0++
будет означать 0 = 0 + 1
, что не имеет смысла, а также getInt() = getInt() + 1
.
Более точно:
int oneA = zero++;
означает
int oneA = zero;
zero = zero + 1; // OK, oneA == 0, zero == 1
int oneB = 0++;
означает
int oneB = 0;
0 = 0 + 1; // wrong, can't assign value to a value.
int oneC = getInt()++;
означает
int oneC = getInt();
getInt() = getInt() + 1; // wrong, can't assign value to a method return value.
С более общей точки зрения, переменным является L-значением, а это означает, что она относится к ячейке памяти, и, следовательно, может быть назначен. л в L -value обозначает оставил стороны оператора присваивания (т.е. =
), даже если L-значения могут быть найдены либо на левой стороне или на правой стороне оператора присваивания (x = y
), например, ,
Противоположное R-значение (R обозначает правой стороны оператора присваивания). R-значения могут использоваться только с правой стороны операторов присваивания, чтобы присвоить что-то значение L. Как правило, значения R - это литералы (числа, строки символов ...) и методы.
Замечание: судя по тому, как вы назвали свои переменные, вы, кажется, предполагаете, что 'int oneA = zero ++; 'присваивает * one *' oneA'. Это неверно. Оператор * post * increment возвращает значение * old * (non-incremented). После 'int oneA = zero ++;', 'oneA' -' 0', а 'zero' -' 1'. – Heinzi
@Heinzi true! Я заметил это в своем реальном коде, это был всего лишь пример – Blundell
Итак, в вашем коде вы бы не просто автоматически записывали 'int oneC = getInt() + 1;'? –