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

Java中i += ++i结果为1的原因?自增表达式相关疑问

Java自增表达式执行逻辑解析

1. 表达式i += ++i的输出为什么是1?

给定代码:

int i = 0;
i += ++i;
System.out.println(i);

Java中+=运算符的执行规则是:先保存左侧变量的当前值,再计算右侧表达式,最后将两者的和赋值给左侧变量。具体步骤:

  • 第一步:保存左侧i的当前值,也就是0;
  • 第二步:执行右侧的++i,i自增为1,右侧表达式结果是1;
  • 第三步:将保存的0和右侧的1相加,得到1,赋值给i,最终输出1。

2. 表达式i = i + ++i的执行结果与自增的内存变化

首先明确:++i是前置自增,一定会立即修改内存中i的值,但这个表达式的结果不是2,而是1。原因是Java对表达式的操作数遵循从左到右的求值顺序:
给定初始i=0,执行i = i + ++i的步骤:

  • 第一步:计算第一个i,取当前值0;
  • 第二步:执行++i,i的内存值变为1,这个操作数的结果是1;
  • 第三步:将0和1相加得到1,赋值给i,最终i的值是1。

你误以为结果是2,是假设了先执行所有自增再计算总和,但Java的求值顺序是严格从左到右处理每个操作数,不是先完成所有自增操作。

3. 不同编程语言的差异

Java、C#这类语言严格定义了表达式的求值顺序,所以这类自增表达式的结果是确定的。
但在C/C++中,i = i + ++i这类属于未定义行为——标准没有规定操作数的求值顺序,不同编译器、不同编译选项可能得到不同结果,比如有的编译器会先算++i再算左边的i,结果就是2,有的则和Java一样得到1。这种差异是因为不同语言的标准对表达式求值规则的定义不同。

4. 表达式i = i + ++i + i的执行结果

假设初始i=0,按Java的求值顺序:

  • 第一步:取第一个i的值0;
  • 第二步:执行++i,i变为1,取这个操作数的值1;
  • 第三步:取第三个i的值(此时i已经是1);
  • 第四步:计算总和0+1+1=2,赋值给i,最终i的值是2。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 15:05:00