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

Java代码a += ++a-5/3+6*a输出86的计算逻辑疑问

为什么这段Java代码输出86?

先看你的代码:

{
    int a = 10;
    a += ++a-5/3+6*a;
    System.out.print(a);
}

你疑惑的核心点在于复合赋值运算符+=的执行规则,它不是简单等价于a = a + ...,而是有明确的执行逻辑:

  • 复合赋值表达式E1 += E2的本质是:先计算并暂存E1的原始值(只计算一次),然后计算E2的结果,最后用E1的原始值加上E2的结果,再赋值给E1。

接下来一步步拆解计算过程:

  1. 初始a=10,执行a += ...时,先暂存a的原始值10。
  2. 计算右侧表达式++a-5/3+6*a:
    • ++a:a自增为11,该表达式的结果是11;
    • 5/3:整数除法,结果为1;
    • 6*a:此时a已经是11,所以结果是6*11=66;
    • 按运算符优先级和从左到右的结合性计算:11 - 1 + 66 = 76。
  3. 用暂存的原始值10加上右侧结果76,得到10+76=86,赋值给a,最终a的值就是86。

你之前的误区是把a = a + ...中的第一个a当成了自增后的11,但实际上+=会提前锁定左侧变量的原始值,不会因为右侧对a的修改而改变这个初始值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 23:04:57