You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java复合赋值运算中变量更新时机疑问:为何复用x初始值?

解析Java复合赋值表达式的求值逻辑

首先纠正你的核心误解:Java不会等到整条语句结束后才更新变量值,复合赋值运算符(+=、-=等)执行完成后会立即修改对应变量的值,后续表达式会直接使用更新后的变量值。

一步步拆解你的代码表达式

你的代码:

class HelloWorld {
  public static void main(String[] args) {
    int x = 10;
    int y = 20;
    int z = x += y -= x += y;
    System.out.println(z);
  }
}

复合赋值运算符是右结合的,所以表达式x += y -= x += y会从最右侧的子表达式开始计算,步骤如下:

初始值:x=10,y=20

  1. 计算最右侧的x += y:

    • 取当前x=10和y=20,计算10+20=30
    • 将结果赋值给x,此时x=30
    • 该子表达式的结果为30
  2. 计算y -= 30(用上一步的结果):

    • 取当前y=20,计算20-30=-10
    • 将结果赋值给y,此时y=-10
    • 该子表达式的结果为-10
  3. 计算x += -10(用上一步的结果):

    • 取当前x=30,计算30 + (-10)=20
    • 将结果赋值给x,此时x=20
    • 该子表达式的结果为20,最终赋值给z

所以这段代码的实际输出应为20,而非你所说的0——可能是你看错了输出或代码书写有误。

解答你的疑问

  • 赋值操作的意义:赋值的核心就是立即修改变量的值,后续表达式会依赖这些更新后的值计算,这和z = x + y - (x + y)完全不等价。后者只是用变量初始值做纯计算,不会修改任何变量;而前者会多次修改x和y,后续步骤的计算都基于更新后的值。
  • 关于变量值的使用:你的补充疑问不成立,后续表达式并没有使用x的初始值10。比如y -= x += y中,x += y已经把x更新为30,y的计算就是基于这个30进行的,最后x又被更新为20。

内容的提问来源于stack exchange,提问作者Janb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 11:13:20