我已经混淆了太多次+=
和=+
,我认为我之所以会忘记是因为我不知道这两者之间的区别,只知道其中一个给我期望的值,而另一个则不是。
为什么会出现这种情况呢?
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)
。
x += y
是相同的意思
x = x + y
并且
x =+ y
错误,但可以解释为
x = 0 + y
这很简单。
x += 1
和 x = x + 1
是一样的,都是让x
加1。
x =+ 1
的意思是让x
的值变成正数1。
+=
和类似的运算符。在C语言非常早期的版本中(上世纪70年代中期),复合赋值运算符左侧有"=",因此x =- 3;
等同于
x = x - 3;
(除了x
只被评估一次)。
这引起了困惑,因为
x=-1;
会减少x的值而不是将值-1赋给它,因此语法已更改(避免了必须用空格包围运算符的恐惧:x = -1;
)。
(我在示例中使用-=
和=-
,因为早期的C语言没有一元+
运算符。)
幸运的是,Java是在C语言更改为当前语法之后发明的,因此它从未遇到过这个特定的问题。
因为=+
不是Java运算符。
+
。根据这个,a = b
和a =+ b
不是一样的吗? - deadcode+
不是"将运算数变为正数"的运算符,而是实际上是"恒等"运算符。它...并不是很有用 :) - dleva = +b
的工作原理如下:int b = -5;
当我们写a = +b;
时,变量 a 现在被设置为 b 的一元运算。 因此,a = + (-5)
,结果为a=-5
。 - SunnyAk