2

例えば:

int a = 10;
a += 1.5;

これは完全に実行されますが

a = a+1.5;

この割り当ては言うType mismatch: cannot convert from double to int+= operatorだから私の質問は:との違いは何ですか= operator。なぜ最初の割り当ては何も言わなかったが、2番目の割り当ては何も言わなかった。説明してください。最初の課題をすべての場所で使用できるかどうかを知りたいだけです。

4

4 に答える 4

9
int a = 10;
a += 1.5;

と同等です:

int a = 10;
a = (int) (a + 1.5);

一般に:

x += y;と同等ですx = (type of x) (x + y);


15.26.2を参照してください。複合代入演算子

于 2013-02-27T08:55:26.153 に答える
9

Java言語仕様セクション15.26.2から:

フォームの複合代入式は、E1 op= E2と同等ですE1 = (T) ((E1) op (E2))。ここTで、はのタイプですが、 1回だけ評価されるE1点が異なります。E1

したがって、(2番目のバージョンがコンパイルされない理由に関して)最も重要な違いは、元の変数の型への暗黙のキャストバックです。

于 2013-02-27T08:56:19.883 に答える
2

このリンクを確認してください

int a = 10;
a += 1.5;

として扱われます

int a=10;
a=(int)(a+1.5);

このリンク式で見つけることができるように

于 2013-02-27T09:02:38.880 に答える
1

の場合には

a += 1.5;

暗黙の自動ボクシングが行われます

ここのように

a = a+1.5;

int変数をfloat/double変数に明示的に追加しています

だからそれを修正するには

a = a+(int)1.5;

また

a = (int) (a+1.5);
于 2013-02-27T08:57:00.797 に答える