gpt4 book ai didi

java - 一元运算与赋值融合

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:12:15 24 4
gpt4 key购买 nike

以下代码中的可疑结果:

public static void main (String[] args)
{
int i = 2;
i = i+=2 + i++;
System.out.println(i); }

期望 8 作为输出,因为“i+=2”应该更新 i,但它并没有这样做。

Output: 6

我推断简写赋值运算符按预期返回 4 但没有更新变量 i 中的相同内容。任何解释将不胜感激。

最佳答案

i++ 是一个后缀递增 - 它递增 i,然后基本上返回 i 的旧值。等效的前缀运算符 ++i 将返回“更新”值,但这不是此处使用的值。

i+=2 的工作方式不同,但它本质上等同于 i+2,因为它确实返回更新后的值。

但是,我认为出现混淆的地方在于您是这样看的:

i = (i += 2) + i++;

...确实给出了您预期的结果。 i+=2 给出 4,并将 i 更新为 4,然后 i++ 返回 4(而不是 5,因为它是后增量。)但是,当您将运算符优先级纳入等式时,Java 实际上默认将其“括起来”:

i = i += (2 + i++);

为了消除混淆,Java 以这种方式计算它,因为 += 运算符 has least precedence in this example , 因此首先计算加法表达式 (+)。

这个括号内的语句本质上等同于:

i = (i = i + (2 + i++));

这又简化为:

i = i + (2 + i++);

所以给定上面的语句,并且从左到右计算,我们首先取 i (2) 的值,然后加上 2+i++ 的值;后者给出 4(因为后缀增量)。所以我们最后的结果是2+4,也就是6。

关于java - 一元运算与赋值融合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16360084/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com