以下代码中的结果值得怀疑:
public static void main (String[] args)
{
int i = 2;
i = i+=2 + i++;
System.out.println(i); }
本来期待着8作为输出,因为 'i+=2' 应该update我,但它的行为并非如此。
输出:6
我推断简写赋值运算符正在返回4正如预期的那样,但没有更新变量 i 中的相同内容。任何解释将不胜感激。
i++
是一个后缀增量 - 它递增 i,然后返回 i 的旧值。等效的前缀运算符,++i
,将返回“更新”值,但这不是这里使用的值。
i+=2
但工作方式不同,它本质上相当于i+2
,自从它does返回更新后的值。
然而,我认为出现混乱的地方是你这样看待它:
i = (i += 2) + i++;
...哪个does给出你的预期结果。i+=2
给出 4,并更新i
到 4,那么i++
返回 4(而不是 5,因为它是后增量。)但是,当您将运算符优先级纳入等式时,Java 实际上默认将其“括起来”,如下所示:
i = i += (2 + i++);
为了消除任何混淆,Java 以这种方式评估它,因为+=
操作员在此示例中具有最低优先级 http://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html,因此加法表达式 (+
)首先计算。
这个括号内的语句本质上等同于:
i = (i = i + (2 + i++));
这又简化为:
i = i + (2 + i++);
因此,根据上面的陈述,从左到右计算,我们首先取 i (2) 的值,然后加上2+i++
;后者给出 4(因为后缀增量)。所以我们最终的结果是2+4,也就是6。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)