看下面一段代碼
代碼Ajava
short a=4; int b=5; a += b;
代碼Bcode
short a=4; int b=5; a =a+b;
能夠告訴你:A編譯成功,B編譯失敗。
這裏沒有爲何,須要記住一點,+= 會對結果進行轉型,A代碼的結果是int,最後賦值給a的時候,會轉爲shot類型。
咱們看它的編譯後的二進制代碼:編譯
4: iconst_4 //加載常量4 5: istore_1 //將常量4給第一個變量 6: iconst_5 //加載常量5 7: istore_2 //將常量5給第二個變量 8: iload_1 //以int類型加載第一個變量到棧 9: iload_2 //以int類型加載第二個變量到棧 10: iadd //彈出兩個變量進行相加,結果入棧 11: i2s //彈出一個變量,將int轉爲short 12: istore_1 //將short類型的值給第一個變量
那麼 -=,*=,/=呢?class