私の同僚は私にこの質問をしました。私は混乱しています。短く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;
x = x + i
は単にx = x + i
であるが、実際に
int i = 123456;
short x = 12;
x = (short)(x + i);
あります。 short
として自動的にキャストされないため、エラーが発生します(x + i
はint
です)。
形態
E1 op= E2
の複合代入式はT
はE1
が一度だけ評価されることを除いて、E1
のタイプであり、E1 = (T)((E1) op (E2))
と等価です。
特に指定しない限り、数値はint
として扱われます。したがって、2番目のステートメントでは、変数の代わりにリテラル番号を使用すると、自動的に適切な型にキャストされません。
x = x + (short)1;
...が動作します。
私は間違った方程式を書きました。私は私の質問を更新しました。 'x = x + i'を参照してください。 –
さて、なぜx = x + xでないのですか?作業?この問題は、数値1ではなく、intを返す+演算子で起こります。 – lleite
整数型(int型、ショート、チャーとバイト)の+
オペレータが常に結果としてintを返し。
あなたは、このコードでいることを見ることができます:x
がint
でない限り
//char x = 0;
//short x = 0;
//byte x = 0;
int x = 0;
x = x + x;
それはコンパイルされません。
ただし、intをshortに追加しようとしています。 a = b!= b = a –
実際にはshortをintに追加しています –
興味のある方はこの 'char ch = '0'を試してください。 ch * = 1.2; 'now ch is '' 8'';) –