我错放+=
了=+
太多次,我想我一直忘记,因为我不知道这两者之间的区别,只有一个给了我期望的价值,而另一个没有。
为什么是这样?
我错放+=
了=+
太多次,我想我一直忘记,因为我不知道这两者之间的区别,只有一个给了我期望的价值,而另一个没有。
为什么是这样?
+=
是一个复合赋值运算符 - 它将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
while 一样
x =+ 1
将使x
具有(正)一的值
一些历史观点:Java 继承了+=
C的和类似的运算符。在 C 的早期版本(1970 年代中期)中,复合赋值运算符的左侧有“=”,因此
x =- 3;
相当于
x = x - 3;
(除了x
只评估一次)。
这引起了混乱,因为
x=-1;
将递减 x 而不是为其分配值 -1,因此语法已更改(避免必须用空格包围运算符的恐怖:x = -1;
)。
(我在示例中使用了-=
and=-
是因为早期的 C 没有一元运算+
符。)
幸运的是,Java 是在 C 更改为当前语法之后很久才发明的,因此它从未出现过这种特殊问题。
因为=+
不是 Java 运算符。
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