a+=a+=b的执行

来源:互联网 发布:淘宝手机店铺收藏 编辑:程序博客网 时间:2024/06/03 16:31

一个面试题:
public static void main(String[] args) {
int a=6;
int b=3;
a+=a+=b;
//a=a+(a=a+b); //和a+=a+=b等效
System.out.println(a);
System.out.println(b);
}

猜猜a和b的打印结果。a=15;b=3;按照一开始的想法,**首先计算a+=b,得到a=9,再算a+=a,得到a=18,但是这是错的!**为了看到它的执行过程,只能看编译后的class文件,

这里写图片描述

可以看到,执行过程:
iload_1 //6入栈
iload_1 //6入栈
iload_2 //3入栈
iadd //栈顶6,3加得到9
dup//9入栈
istore_1//a=9
iadd//栈顶9,6加得到15
istore_1//a=15

这下就看的很清楚了,这种a+=a+=b的写法,我只想说,谁这么写谁有病。。。。

0 0