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

Java算术运算中变量赋值顺序疑问:为何输出结果为12?

为什么Java中b = b + (b=3)的输出是12?

你混淆了运算优先级和表达式求值顺序这两个核心概念,这是问题的关键所在。

Java里的二元运算符(比如+)遵循从左到右的求值顺序——不管运算符优先级如何,都会先计算左操作数,再计算右操作数。

我们一步步拆解这段代码:

int b = 9; 
b = b + (b = 3); 
System.out.println( "b = " + b );
  1. 初始状态:b = 9
  2. 执行b = b + (b = 3)时,先计算左操作数b,此时取到的值是9,这个值会被暂存起来。
  3. 接着计算右操作数(b = 3):这是一个赋值表达式,它的作用是把3赋值给b,同时这个表达式本身的结果就是3。此时b的实际值已经变成3,但左操作数已经提前取到了9。
  4. 最后把暂存的9和右操作数的结果3相加,得到12,再赋值给b,所以最终b的值是12。

你之前的误区是认为括号会让b=3先执行,从而影响左操作数的取值。但括号的作用只是提升(b=3)作为一个整体的优先级,让它成为+的右操作数,而不是改变左操作数先求值的顺序。

简单来说:优先级决定表达式的结构(谁和谁结合),求值顺序决定多个操作数的计算先后。Java中除了&&、||、?:这些短路运算符,其他都是严格从左到右计算操作数。

内容的提问来源于stack exchange,提问作者S. King

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 12:45:47