一个面试题:
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的写法,我只想说,谁这么写谁有病。。。。