2011-09-17 34 views

回答

71

編程的 「常識」 是x += yx = x + y等效的速記符號。只要xy屬於同一類型(例如,兩者均爲int s),您可以認爲這兩個語句是等價的。

但是,在Java中,x += y不是一般與x = x + y相同。

如果xy屬於不同類型,則由於語言規則,兩種語句的行爲不同。例如,讓我們x == 0(int)和y == 1.1(雙):

int x = 0; 
    x += 1.1; // just fine; hidden cast, x == 1 after assignment 
    x = x + 1.1; // won't compile! 'cannot convert from double to int' 

+=執行隱式轉換,而對於+你需要明確地投下第二個操作數,否則,你會得到一個編譯錯誤。從約書亞布洛赫的Java的謎題

報價:

(...)複合賦值表達式自動轉換的 的結果,他們在他們的 左側進行到變量的類型計算。如果結果的類型與變量 的類型相同,則演員陣列不起作用。但是,如果結果的類型比變量的類型寬,則化合物 賦值運算符執行無聲縮小基元 轉換[JLS 5.1.3]。

+0

+1,它必須執行BEFORE賦值。 –

+1

此外,如果'x'是一個更復雜的表達式(比如數組或字段訪問)而不是單個變量,那麼它的組件表達式現在只被計算一次而不是兩次。 –

+4

我所有的教授都說謊:O –

2

devtop += Math.pow(x[i] - mean, 2);會增加操作的Math.pow(x[i] - mean, 2)的結果向devtop變量。

一個更簡單的例子:

int devtop = 2; 
devtop += 3; // devtop now equals 5 
1

devtop += Math.pow(x[i] - mean, 2);Math.pow(x[i] - mean, 2)添加到devtop

10
  • x += yx = x + y
  • x -= yx = x - y
  • x *= yx = x * y
  • x /= yx = x/y
  • x %= yx = x % y
  • x ^= yx = x^y
  • x &= yx = x & y
  • x |= yx = x | y

等等...

+0

怎麼樣= +?它編譯,但什麼都不做 – kommradHomer

+0

@kommradHomer'x = + y'等價於'x = y'。 –

+1

@kommradHomer'x = + y'是'x = 0 + y' –