一个面试题: 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的写法,我只想说,谁这么写谁有病。。。。
转载请注明原文地址: https://ju.6miu.com/read-21965.html