今天和龙哥哥探讨一个看似简单确在面试中很容易被坑到的一个面试题,若是面试官问你a+=b与a=a+b之间的区别,你会怎么回答呢?面试
不少人在回答这个问题的时候,不知道从何下手,或者直接来一句,这个不就是同样的嘛~a+=b不就是a=a+b的变形吗?若是你是这样回答,那面试官可能会直接结束此次面试让你回家等通知了!哈哈~测试
其实细致一点来分析,其实这两个等式在必定程度上仍是有区别的:spa
一、在编译时,a+=b的执行效率要比a=a+b的执行效率高;code
二、在进行运算时,尤为是在不一样类型的两个变量在进行运算时,因为:①运算过程当中低精度向高精度转换是自动转换;②高精度向低精度转换是必须进行显性的强制转换;blog
而在a+=b这个等式中,+=在运算中,就结合了强制类型转换的功能,所以在进行编译的过程当中,不会出现编译错误,而对于a=a+b;这个式子,由于是简单的运算,没有类型转换,在编译过程当中会报错,代码以下:编译
1 //测试代码 2 public class Test { 3 public Test() { 4 int a = 5; 5 char b = 3; 6 7 b+=a;//编译经过 8 b=a+b;//编译出错 9 } 10 11 12 public static void main(String[] args) { 13 Test t = new Test(); 14 } 15 16 }
要让上面的编译不出错,能够写成强制转换类型,代码以下:class
public class Test { public Test() { int a = 5; char b = 3; b+=a;//编译经过 b=(char)(a+b);//编译经过 } public static void main(String[] args) { Test t = new Test(); } }
所以,总的来讲,a=a+b;和a+=b;并非任什么时候候都等价,也要分状况的。效率