2011-09-17 35 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' –