本人使用java3年,也算是个程序小鸟,但是总喜欢把问题研究的透彻。
原题是这么个样子:
int a = 2,b = 5;
a+=b+=a+=b;
问最后a,b分别是多少。
我原本以为整个过程是这样的
0.原式清晰化的表达一下: a+=(b+=(a+=b));
1.先算最里面的括号 a+=b //a = 7;
2.再算中间括号 b+=a //b = 12;
3.计算最后括号 a+=b //a = 19
但是实际结果出乎我的意料,答案是a=14 b=12
后来我想了一下,出现这样的原因是因为第一次计算最里面的括号并没有给a赋值。
也就是说,[color=red]a,b在整个计算过程中,只进行了最后那一次的赋值运算[/color]。但是这个说法遭来了同事的反驳。
因此,我在这里发帖询问,[color=blue]想彻底弄清楚,这么个表达式的整个运算过程。
如果能顺便提到编译器如何实现这样操作那就更好不过了,还望知道详情的大神不吝赐教,小弟在此叩拜[/color]
如果实在是腾不出时间解答这无聊的问题,给点参考资料也许,哪怕给几个搜索关键字(我都不知道该对这样的问题怎么搜索)
红糖糍粑
慕桂英3389331
慕运维8079593
繁花如伊
相关分类