今天和龍哥哥探討一個看似簡單確在面試中很容易被坑到的一個面試題,如果面試官問你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;並不是任何時候都等價,也要分情況的。