2012-06-29 63 views
-5

我见过的代码块这个符号/经营者:的Java + =意味着

a+=1; 

但我无法弄清楚它做什么。有人能帮助我吗?

回答

6

Java Language Specification

形式E1 op= E2的化合物赋值表达式是等效于E1 = (T) ((E1) op (E2)),其中TE1类型,不同之处在于E1是只评估一次。

的最后一句是很重要的,如果左侧有副作用:

array[i++] += 1; 

这是等同于:

array[i++] = array[i++] + 1; 

第一个表达式将递增i一次。第二个将增加i两次,并将右边的值分配给array的不同元素,而不是第一个表达式。

我要指出的是,这几样副作用的语句都没有很好的编程形式尽管你经常会发现他们使用。

+1

+1。我没有想到这一点。编辑我的答案以反映这一点。 –

5

它是以下简写:

a = a + 1; 
6
x += y; 

相当于

x = x + y; 

存在用于其他数学运算类似的运算符: - =,* =,/ =。例如:

x *= y; 

相当于

x = x * y; 

(编辑:上述假设不存在“副作用”在X;即,预增量或后置运算符被修改以反映泰德霍普的点。 )

1

这意味着a = a + 1即增量a

+1

情况并非如此......它更像是将一个添加到'a'。 – Makoto

10

它相当于

a = a + 1; 
+3

不完全等同。例如,如果'a'是'byte'或'short',那么'a + = 1'是合法的,但'a = a + 1'不起作用。问题是'a + 1'是一个'int',所以它必须通过一个cast来缩小,然后才能再次分配给'a'。 –

+1

哇!我没有想到它!好评! :) – user278064