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