今天和龙哥哥探讨一个看似简单确在面试中很容易被坑到的一个面试题,如果面试官问你a+=b与a=a+b之间的区别,你会怎么回答呢?
很多人在回答这个问题的时候,不知道从何下手,或者直接来一句,这个不就是一样的嘛~a+=b不就是a=a+b的变形吗?如果你是这样回答,那面试官可能会直接结束这次面试让你回家等通知了!哈哈~
其实细致一点来分析,其实这两个等式在一定程度上还是有区别的:
1、在编译时,a+=b的执行效率要比a=a+b的执行效率高;
2、在进行运算时,尤其是在不同类型的两个变量在进行运算时,由于:①运算过程中低精度向高精度转换是自动转换;②高精度向低精度转换是必须进行显性的强制转换;
而在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 }
要让上面的编译不出错,可以写成强制转换类型,代码如下:
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;并不是任何时候都等价,也要分情况的。