+ =和= +之间的差异
我错了+ = = = +一次到多次,我想我一直都忘了,因为我不知道这两者之间的区别,只有那一个给了我期望它的值,而另一个没有。
为什么是这样?
a += b
是a = a + b
简写(尽管注意表达式a
只会被评估一次。)
a =+ b
是a = (+b)
,即将a = (+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; ie x = 20 x =+ 5; // Equivalent to x = +5, so x = 5.
+=
– >将右侧添加到左侧
=+
– >不要使用它。 将左侧设置为右侧。
a += b
等于a = a + b
。 a =+ b
等于a = (+b)
。
它很简单.x + = 1是x = x + 1而x = + 1会使x的值为1(正)
x += y
是相同的
x = x + y
和
x =+ y
是错的,但可以解释为
x = 0 + y
因为=+
不是Java运算符。
一些历史观点:Java从Cinheritance了+=
和类似的运算符。在C的早期版本(20世纪70年代中期),复合赋值运算符在左边有“=”,所以
x =- 3;
相当于
x = x - 3;
(除了x
只评估一次)。
这引起了混乱,因为
x=-1;
将减少x而不是为其赋值-1,因此语法被更改(避免了必须用空格包围运算符的恐怖: x = -1;
)。
(我在例子中使用了-=
和=-
因为早期的C没有一元+
运算符。)
幸运的是,Java在C改为当前语法之后很久就发明了,因此它从未遇到过这个特殊问题。