你能在java中解释这个表达式吗? - > sum + = sum + d

时间:2017-06-02 14:20:03

标签: java for-loop operators operation

我在java中获得了样本考试题。我在for循环中看到了这个表达式sum += sum + d 这是代码:

double sum =0;

for (double d = 0; d<10; sum += sum + d) {
    d += 0.1;
}

我只是不明白这一部分 我只知道这些:

x+=1
x=x + ++x;
x=x + x++;

提前致谢!

5 个答案:

答案 0 :(得分:2)

(我很高兴您理解这三个混淆的陈述。但请不要在制作中使用它们。最后两个在C和C ++中未定义。)

sum += asum = sum + a对任何a的简写(忽略由于隐式类型转换而产生的任何微妙差异)。

因此sum += sum + dsum = sum + sum + d;,简化为

sum = 2 * sum + d;

答案 1 :(得分:1)

如果要更准确,sum += a 与<{1}}不相同,则会有类型转换为sum类型。让我们考虑下一个例子:

sum = sum + a

相同
short x = 3;
x += 4.6;

但不是short x = 3; x = (short)(x + 4.6); 所以,我们有x = x + 4.6。有关详细信息,请阅读 JLS

  

形式E1 op = E2的复合赋值表达式是等价的   到E1 =(T)((E1)op(E2)),其中T是E1的类型,除了E1   仅评估一次。

答案 2 :(得分:1)

ValidationEventHandler,您可以看到+(添加)运算符的优先级高于+=(赋值)运算符,因此我们首先评估sum + d部分,让我们调用这个结果sumplusd,我们得到:

sum += sumplusd

然后我们评估+=,即通过右边部分的值将表达式左侧部分的变量递增,得到:

sum = sum + sumplusd,其内容为sum = sum + (sum + d),内容为sum = sum*2 + d

答案 3 :(得分:0)

因为,QueryResult result = engine.query(query,params); for (Map<String,Object> currentMap : result) { Node node = (Node) currentMap.get("n"); results.add(new BusyProfile(node)); } 相当于sum + = "any variable or constant"。因此,sum = sum + "variable or constant"sum+=sum+d相同。

答案 4 :(得分:0)

简化整个混乱,包括do循环:

double sum = 0.0;
double d = 0.0;
while ( d < 10.0 )
{
    sum = 2.0*sum + d
    d = d + 0.1;
}