我的一位同事向我提出這個問題,我有些困惑。將int簡寫爲
int i = 123456;
short x = 12;
聲明
x += i;
編譯罰款然而
x = x + i;
不
什麼是Java在這裏做什麼?
我的一位同事向我提出這個問題,我有些困惑。將int簡寫爲
int i = 123456;
short x = 12;
聲明
x += i;
編譯罰款然而
x = x + i;
不
什麼是Java在這裏做什麼?
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))
,其中T
是E1
類型,不同之處在於E1
只計算一次。
數字被視爲int
,除非您專門投它們否則。因此,在第二個語句中,當使用文字數字而不是變量時,它不會自動將其轉換爲適當的類型。
x = x + (short)1;
...應該工作。
我寫了錯誤的方程。我更新了我的問題。看看它的'x = x + i'。 –
好的,那麼爲什麼不x = x + x;工作?問題不在數字1上,而是在返回int的+運算符上。 – lleite
的+
操作者積分類型(int,短,炭和字節)的總返回int作爲結果。
你可以看到,這段代碼:
//char x = 0;
//short x = 0;
//byte x = 0;
int x = 0;
x = x + x;
它不會編譯除非x
是int
。
然而,您正試圖添加int。 a = b!= b = a –
你實際上是在一個簡短的 –
上添加一個int。 ch * = 1.2;'現在ch是''8';) –