对于2-11 选择题的个人理解,需要向老师求证

来源:2-11 选择练习

Macrohard

2021-12-09 22:41:48

在另外一篇关于此问题的问答中,看到了老师的解答为:“我们在java的语言学习中四种运算符是有优先级顺序的,算术运算符>关系运算符>逻辑运算符>赋值运算符,所以这道题优先执行算术运算符,然后在进行赋值。


因此我做出了如下的推导:

// a+=a*=a
// 从右往左计算
// a += (a = a * a)
// a += (a = 3 * 3)
// a += (a = 9)
// a = a + (a = 9)
// 因为赋值优先级很低,所以没有操作,因此左侧的操作数a仍为3
// a = 3 + (a = 9)
// 表达式需要运算符+运算符,所以表达式(a = 9)的值为9,但此赋值依旧保留没有进行操作
// a = 3 + 9 附加 (a = 9)
// a = 12 附加 (a = 9)
// 从右往左计算因此a先变成了9又变成了12

不然根据答案的参考解析:

赋值运算从右向左执行,故a=a*a=9,a+=9,a=a+9=3+9=12


我总觉得(a=9)这个赋值步骤莫名其妙被吞了,为什么会凭空消失呢?不知道我的推导有没有道理,希望老师解答,谢谢!


写回答

1回答

好帮手慕小明

2021-12-10

同学你好,

1、同学可能考虑的比较复杂,这里简单理解:上述语句a+=a*=a中包含两个运算符+=和*=;因为+=,*=都是赋值运算符,所以从右向左执行:先计算a*=a,即a=a*a=9;再算a+=9,即a=a+9,所以最后结果a= 3+9=12

2、a=9这一步骤并没有消失,它会根据赋值运算从右往左继续执行得到a+=9,然后得到结果12

注:之前的回答容易让同学感觉抽象,现已进行完善修改

祝学习愉快~

2
hacrohard
hp>好的,谢谢老师

h021-12-11
共1条回复

0 学习 · 9886 问题

查看课程