对于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回答
同学你好,
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
注:之前的回答容易让同学感觉抽象,现已进行完善修改
祝学习愉快~
相似问题