【发布时间】:2011-10-20 23:10:53
【问题描述】:
我将+= 与=+ 错位太多次了,我想我一直忘记,因为我不知道这两者之间的区别,只有那个给了我我期望的价值,并且另一个没有。
这是为什么?
【问题讨论】:
我将+= 与=+ 错位太多次了,我想我一直忘记,因为我不知道这两者之间的区别,只有那个给了我我期望的价值,并且另一个没有。
这是为什么?
【问题讨论】:
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
【讨论】:
+是什么意思? a = b不是按照这个跟a =+ b一样吗?
+ 不是“使操作数为正”运算符,它实际上是“身份”运算符。这……没那么有用:)
a = +b 的工作方式如下:int b = -5; 变量 a 现在设置为 b 的一元,当我们编写 a = +b; 所以,a = + (-5),导致 a=-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 的值为(正)一
【讨论】:
一些历史观点:Java 从 C 继承了 += 和类似的运算符。在 C 的早期版本(1970 年代中期)中,复合赋值运算符的左侧有“=”,所以
x =- 3;
相当于
x = x - 3;
(除了x 只计算一次)。
这引起了混乱,因为
x=-1;
将递减 x 而不是将值 -1 分配给它,因此更改了语法(避免了必须用空格包围运算符的恐惧:x = -1;)。
(我在示例中使用了-= 和=-,因为早期的C 没有一元+ 运算符。)
幸运的是,Java 是在 C 更改为当前语法之后很久才发明的,所以它从来没有遇到过这个特殊问题。
【讨论】:
因为=+ 不是Java 运算符。
【讨论】: