2012-06-29 67 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