+=和=+的区别

50

我已经混淆了太多次+==+,我认为我之所以会忘记是因为我不知道这两者之间的区别,只知道其中一个给我期望的值,而另一个则不是。

为什么会出现这种情况呢?

8个回答

96

a += ba = a + b的简写形式(请注意,表达式a只会被评估一次)。

a =+ ba = (+b),即将b的单元运算符+分配给a

示例:

int a = 15;
int b = -5;

a += b; // a is now 10
a =+ b; // a is now -5

1
回答非常有帮助且简洁,但是请原谅我作为新手不明白什么是b的一元+。根据这个,a = ba =+ b不是一样的吗? - deadcode
3
是的!一元操作符 + 不是"将运算数变为正数"的运算符,而是实际上是"恒等"运算符。它...并不是很有用 :) - dlev
a = +b 的工作原理如下: int b = -5; 当我们写 a = +b; 时,变量 a 现在被设置为 b 的一元运算。 因此,a = + (-5),结果为 a=-5 - SunnyAk

23

+= 是一个复合赋值运算符 - 它将 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.

11

+= → 将右侧的值加到左侧

=+ → 不要使用这个。将右侧的值赋给左侧。


3
+1 表示“不要使用”。如果有意使用,则其目的可能是为了混淆。如果是无意中使用,则这是一个错误。 - Atreys

5

a += b 相当于 a = a + ba =+ b 相当于 a = (+b)


3
x += y 

是相同的意思

x = x + y

并且

x =+ y

错误,但可以解释为

x = 0 + y

3

这很简单。

x += 1x = x + 1 是一样的,都是让x加1。

x =+ 1 的意思是让x的值变成正数1。


0
一些历史背景:Java从C语言继承了+=和类似的运算符。在C语言非常早期的版本中(上世纪70年代中期),复合赋值运算符左侧有"=",因此
x =- 3;

等同于

x = x - 3;

(除了x只被评估一次)。

这引起了困惑,因为

x=-1;

会减少x的值而不是将值-1赋给它,因此语法已更改(避免了必须用空格包围运算符的恐惧:x = -1;)。

(我在示例中使用-==-,因为早期的C语言没有一元+运算符。)

幸运的是,Java是在C语言更改为当前语法之后发明的,因此它从未遇到过这个特定的问题。


0

因为=+不是Java运算符。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接