2012-09-21 6 views
9

私の同僚は私にこの質問をしました。私は混乱しています。短くintを追加する

int i = 123456; 
short x = 12; 

声明

x += i; 

は罰金しかし

x = x + i; 

は、Javaはここで何をやっているではない

んコンパイル?

+0

ただし、intをshortに追加しようとしています。 a = b!= b = a –

+0

実際にはshortをintに追加しています –

+3

興味のある方はこの 'char ch = '0'を試してください。 ch * = 1.2; 'now ch is '' 8'';) –

答えて

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

x = x + iは単にx = x + iであるが、実際に

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

あります。 shortとして自動的にキャストされないため、エラーが発生します(x + iintです)。


形態E1 op= E2の複合代入式はTE1が一度だけ評価されることを除いて、E1のタイプであり、E1 = (T)((E1) op (E2))と等価です。

からJLS §15.26.2

2

特に指定しない限り、数値はintとして扱われます。したがって、2番目のステートメントでは、変数の代わりにリテラル番号を使用すると、自動的に適切な型にキャストされません。

x = x + (short)1; 

...が動作します。

+0

私は間違った方程式を書きました。私は私の質問を更新しました。 'x = x + i'を参照してください。 –

+0

さて、なぜx = x + xでないのですか?作業?この問題は、数値1ではなく、intを返す+演算子で起こります。 – lleite

1

整数型(int型、ショート、チャーとバイト)の+オペレータが常に結果としてintを返し。

あなたは、このコードでいることを見ることができます:xintでない限り

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

それはコンパイルされません。

関連する問題