2012-09-21 38 views
9

我的一位同事向我提出這個問題,我有些困惑。將int簡寫爲

int i = 123456; 
short x = 12; 

聲明

x += i; 

編譯罰款然而

x = x + i; 

什麼是Java在這裏做什麼?

+0

然而,您正試圖添加int。 a = b!= b = a –

+0

你實際上是在一個簡短的 –

+3

上添加一個int。 ch * = 1.2;'現在ch是''8';) –

回答

15
int i = 123456; 
short x = 12; 
x += i; 

實際上是

int i = 123456; 
short x = 12; 
x = (short)(x + i); 

x = x + i簡直是x = x + i。它不會自動轉換爲short,因此會導致錯誤(x + i類型爲int)。


形式E1 op= E2的化合物賦值表達式是等效於E1 = (T)((E1) op (E2)),其中TE1類型,不同之處在於E1只計算一次。

- JLS §15.26.2

2

數字被視爲int,除非您專門投它們否則。因此,在第二個語句中,當使用文字數字而不是變量時,它不會自動將其轉換爲適當的類型。

x = x + (short)1; 

...應該工作。

+0

我寫了錯誤的方程。我更新了我的問題。看看它的'x = x + i'。 –

+0

好的,那麼爲什麼不x = x + x;工作?問題不在數字1上,而是在返回int的+運算符上。 – lleite

1

+操作者積分類型(int,短,炭和字節)的總返回int作爲結果。

你可以看到,這段代碼:

//char x = 0; 
//short x = 0; 
//byte x = 0; 
int x = 0; 
x = x + x; 

它不會編譯除非xint