Java赋值运算符优先级疑问:两种赋值表达式结果为何不同?
Java表达式求值顺序解析:两个案例的运行逻辑
案例1代码与结果
int x,a = 100; x = a + (a=6); System.out.println(x); //prints 106
逻辑解析
Java规定表达式的操作数是从左到右依次求值的,运算符优先级仅决定运算的分组方式,不会改变操作数的求值顺序。在a + (a=6)这个表达式中:
- 首先计算左侧的操作数
a,此时a的初始值为100,得到结果100; - 接着计算右侧括号内的赋值表达式
a=6,这个表达式的返回值是6,同时将变量a更新为6; - 最后执行加法运算:100 + 6 = 106,赋值给
x,所以输出106。
案例2代码与结果
int x,a =100; x = (a=6) + a; System.out.println(x); //prints 12
逻辑解析
同样遵循从左到右的操作数求值规则:
- 首先计算左侧括号内的
a=6,赋值后a的值变为6,该表达式的返回值也是6; - 接着计算右侧的操作数
a,此时a已经是6,得到结果6; - 执行加法运算:6 + 6 = 12,赋值给
x,所以输出12。
关于优先级的疑问解答
案例1中没有优先执行a=6,核心原因是Java的求值顺序是操作数从左到右,而非先执行括号内的操作。括号的作用是改变运算的优先级(让赋值先于加法完成),但不会打破操作数从左到右的求值规则——左侧的a会在括号内的表达式之前被求值。
内容的提问来源于stack exchange,提问作者Manoj Ariyarathna
相关产品推荐
相关产品推荐

