Я потерял + = с = + один раз много раз, и я думаю, что продолжаю забывать, потому что я не знаю разницы между этими двумя, только тот дает мне ценность, которую я ожидаю, а другой не делает.
Почему это?
Я потерял + = с = + один раз много раз, и я думаю, что продолжаю забывать, потому что я не знаю разницы между этими двумя, только тот дает мне ценность, которую я ожидаю, а другой не делает.
Почему это?
a += b
является кратким для a = a + b
(хотя обратите внимание, что выражение a
будет оцениваться только один раз.)
a =+ b
a = (+b)
, то есть присвоение унарного +
от b
до a
.
Примеры:
int a = 15;
int b = -5;
a += b; // a is now 10
a =+ b; // a is now -5
+=
является составным оператором присваивания - он добавляет операнд RHS к существующему значению операнда LHS.
=+
- это просто оператор присваивания, за которым следует оператор унарного+. Он устанавливает значение операнда LHS в значение операнда RHS:
int x = 10;
x += 10; // x = x + 10; i.e. x = 20
x =+ 5; // Equivalent to x = +5, so x = 5.
+=
→ Добавить правую сторону влево
=+
→ Не используйте это. Установите левую сторону вправо.
a += b
равно a = a + b
. a =+ b
равно a = (+b)
.
Это simple.x + = 1 равно x = x + 1, а x = + 1 сделает x значением одного (положительного)
x += y
совпадает с
x = x + y
и
x =+ y
неверен, но может быть интерпретирован как
x = 0 + y
Потому что =+
не является оператором Java.
Некоторая историческая перспектива: Java унаследовала +=
и аналогичные операторы из C. В очень ранних версиях C (середина 1970-х) у операторов составных присваиваний был "=" слева, поэтому
x =- 3;
был эквивалентен
x = x - 3;
(за исключением того, что x
оценивается только один раз).
Это вызвало путаницу, потому что
x=-1;
уменьшал бы x вместо того, чтобы присваивать ему значение -1, поэтому синтаксис был изменен (избегая ужаса необходимости окружать операторы пробелами: x = -1;
).
(Я использовал -=
и =-
в примерах, потому что ранний C не имел унарного оператора +
.)
К счастью, Java был изобретен еще долго после того, как C сменился на текущий синтаксис, поэтому у него никогда не было этой конкретной проблемы.