我在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++;
提前致谢!
答案 0 :(得分:2)
(我很高兴您理解这三个混淆的陈述。但请不要在制作中使用它们。最后两个在C和C ++中未定义。)
sum += a
是sum = sum + a
对任何a
的简写(忽略由于隐式类型转换而产生的任何微妙差异)。
因此sum += sum + d
为sum = 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;
}