2017-08-15 67 views
0

我知道,在默認情況下的數字存儲爲整數Java編寫,但Java中的速記運算符如何與普通運算符不同?

byte x = 10; 
x = x + 10; 

是給錯誤而

byte x = 10; 
x += 10; 

正在編制精細

+0

當你做+ =這是一個複合語句,編譯器內部轉換它。在第一種情況下,由於它是直接聲明,因此編譯器直接向您大喊:) –

+0

thanks @ꜱᴜʀᴇꜱʜᴀᴛᴛᴀ –

回答

2

JLS有一個答案你

E1形式的複合賦值表達式op = E2相當於E1 =(T)((E1)op(E2)),其中T是E1的類型,只是E1只評估一次。

short x = 3; 
x += 4.6; 

,並導致X具有值7,因爲它等同於:

short x = 3; 
x = (short)(x + 4.6); 

所以你的情況你的第二個聲明equlas到

x = (byte) x + 10; 

這就是原因所在編譯器很高興。