我错了+ = = = +一次多次,我想我一直忘记因为我不知道这两者之间的区别,只有那一个给了我期望它的价值,另一个没有。
为什么会这样?
答案 0 :(得分:44)
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
答案 1 :(得分:11)
+=
是一个复合赋值运算符 - 它将 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.
答案 2 :(得分:7)
+=
- >将右侧添加到左侧
=+
- >不要使用它。将左侧设置为右侧。
答案 3 :(得分:3)
a += b
等于a = a + b
。 a =+ b
等于a = (+b)
。
答案 4 :(得分:2)
这很简单.x + = 1是x = x + 1而x = + 1会使x的值为1(正)
答案 5 :(得分:2)
x += y
与
相同x = x + y
和
x =+ y
错误但可以解释为
x = 0 + y
答案 6 :(得分:1)
因为=+
不是Java运算符。
答案 7 :(得分:0)
一些历史观点:Java从C继承了+=
和类似的运算符。在C的早期版本(20世纪70年代中期),复合赋值运算符左边是“=”,所以
x =- 3;
相当于
x = x - 3;
(x
仅评估一次)。
这引起了混乱,因为
x=-1;
会递减x而不是为其赋值-1,因此语法被更改(避免了必须用空格包围运算符的恐惧:x = -1;
)。
(我在示例中使用了-=
和=-
,因为早期的C没有一元+
运算符。)
幸运的是,Java在C更改为当前语法之后很久才被发明,因此它从未遇到过这个特殊问题。