例えば:
int a = 10;
a += 1.5;
これは完全に実行されますが
a = a+1.5;
この割り当ては言うType mismatch: cannot convert from double to int
。+= operator
だから私の質問は:との違いは何ですか= operator
。なぜ最初の割り当ては何も言わなかったが、2番目の割り当ては何も言わなかった。説明してください。最初の課題をすべての場所で使用できるかどうかを知りたいだけです。
フォームの複合代入式は、
E1 op= E2
と同等ですE1 = (T) ((E1) op (E2))
。ここT
で、はのタイプですが、 1回だけ評価されるE1
点が異なります。E1
したがって、(2番目のバージョンがコンパイルされない理由に関して)最も重要な違いは、元の変数の型への暗黙のキャストバックです。
の場合には
a += 1.5;
暗黙の自動ボクシングが行われます
ここのように
a = a+1.5;
int変数をfloat/double変数に明示的に追加しています
だからそれを修正するには
a = a+(int)1.5;
また
a = (int) (a+1.5);