Я потерял + = с = + один раз много раз, и я думаю, что продолжаю забывать, потому что я не знаю разницы между этими двумя, только тот дает мне ценность, которую я ожидаю, а другой не делает.
Почему это?
Я потерял + = с = + один раз много раз, и я думаю, что продолжаю забывать, потому что я не знаю разницы между этими двумя, только тот дает мне ценность, которую я ожидаю, а другой не делает.
Почему это?
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 сменился на текущий синтаксис, поэтому у него никогда не было этой конкретной проблемы.