Java算术运算中变量赋值顺序疑问:为何输出结果为12?
为什么Java中
b = b + (b=3)的输出是12? 你混淆了运算优先级和表达式求值顺序这两个核心概念,这是问题的关键所在。
Java里的二元运算符(比如+)遵循从左到右的求值顺序——不管运算符优先级如何,都会先计算左操作数,再计算右操作数。
我们一步步拆解这段代码:
int b = 9; b = b + (b = 3); System.out.println( "b = " + b );
- 初始状态:
b = 9 - 执行
b = b + (b = 3)时,先计算左操作数b,此时取到的值是9,这个值会被暂存起来。 - 接着计算右操作数
(b = 3):这是一个赋值表达式,它的作用是把3赋值给b,同时这个表达式本身的结果就是3。此时b的实际值已经变成3,但左操作数已经提前取到了9。 - 最后把暂存的
9和右操作数的结果3相加,得到12,再赋值给b,所以最终b的值是12。
你之前的误区是认为括号会让b=3先执行,从而影响左操作数的取值。但括号的作用只是提升(b=3)作为一个整体的优先级,让它成为+的右操作数,而不是改变左操作数先求值的顺序。
简单来说:优先级决定表达式的结构(谁和谁结合),求值顺序决定多个操作数的计算先后。Java中除了&&、||、?:这些短路运算符,其他都是严格从左到右计算操作数。
内容的提问来源于stack exchange,提问作者S. King
相关产品推荐
相关产品推荐

