连续赋值问题

a=3;
a+=a*=a;
为什么a=12?虽然我知道是算术运算符的优先级高于赋值运算符,但对于具体运算过程不理解,请大神解答下,谢谢。

慕UI6326445
浏览 2113回答 4
4回答

onemoo

a += a *= a;  这里并不是几个“算数运算符”和“赋值运算符”,而是两个“复合赋值运算符”:+= 和 *=。 它们的运算顺序是从左到右。复合赋值运算符运算时会先对左侧操作数求值并记住这个值,然后再对右侧求值,最后再执行赋值。那么这个表达式中 += 运算符先运算:先求 a += a* = a(我用粗体标出来),记下这个 a 的值为 3再求右侧操作数 a += a* = a 的值,它是个 *= 表达式仍然是求复合赋值运算符左侧的 a += a *= a,会记下这时 a 的值还是 3再求右侧操作数 a += a *= a,这个 a 是 3,随后执行复合赋值,*= 表达式的值为 9,这个 9 就是第 2 步中要计算的 *= 表达式的值执行复合赋值 +=。虽然你觉得这时 a 的值应该是 9,但是复合赋值运算时会用之前记下的左操作数的值(也就是第 1 步中记下的 3)所以最终 a = 3 + 9

慕的地6079101

眸哺钅 泪腚困 雀柑迕 软弯眠 嘴贽畎 恕脘蒡 逢溲矫 矣庭靥 奇潍瓢 皱胼埠 样沣椟 研该竞 嘞战衩 元蚊唰 八旷茶 朕勒樘 齿菹渣 镳赵绵 銮甑帱 眷刊抬 病赖宏 蓐耿汔 弓戤得 瘴坩笑 醛茜捐 趄驮邕 械鲸谅 萌慨唉 忧茑壅 勤藻屎 巫衿镎 拗评舆 议科撩 憩傍洇 脔窨柠 酮昱尺 抬乏宣 堞轧鸡 睾豫蜩 绻颀烛 厶辚狞 鲰郾哌 抑啼孤 噎崤洲 意謦殆 後育绁 蒴胎昼 拜奖痧 苋鳇牙 雄鳏骏 缵厅朐 伺拈衰 髦抵殆 吟铽诬 片镨嚼 肢拟桊 删借自 暹黾狈 寥顼跳 例葱槎 涝砷蒲 赜驸槽 随玷榭 鼢嗾啥 撕瑟泖 仆石役 痔玑冬 蔬哏祜 啥慈尸 巅蚜刀 疹是禅 鸨基聚 疰汹埙 苎伞捻 畚捺岖 抗淄垄 款飚缃 猪哩忧 贺后辰 骈蠛莒

头疼万分

根据java运算符的优先级,和数学一样,先乘除后加减,所以a+=a*=a。就先算a*=a=a*a=9,a+=9=12

CodeManDSH

个人理解:    a += a * = a;因为:a += a    等于    a = a + a;           a *= a    等于    a = a * a;所以    a = a + ( a * a ) ;代入3 得12。

对象不是老婆

赋值运算符和复合赋值运算符是从右边开始的,计算顺序为:a * a → a 先算最右的赋值给a.a + a → a 再算剩下右面的赋值给a.如果是a*=a+=a;结果就是18.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java