コードのブロックでこのシンボル/演算子を見ました:
a+=1;
しかし、私はそれが何をするのか理解できません。誰か助けてくれませんか?
と同等です
a = a + 1;
Java言語仕様から:
の形式の複合代入式は、
E1 op= E2
はE1 = (T) ((E1) op (E2))
のT
型ですがE1
、E1
は 1 回だけ評価されます。
左辺に副作用がある場合、最後のフレーズは重要です。
array[i++] += 1;
これは以下と同等ではありません:
array[i++] = array[i++] + 1;
最初の式は 1 回インクリメントしますi
。2 番目の式は 2 回インクリメントi
し、右側の値をarray
最初の式とは異なる要素に割り当てます。
この種の副作用ステートメントは、頻繁に使用されているにもかかわらず、適切なプログラミング形式ではないことに注意してください。
(E1) op (E2)
の型はと代入互換でない場合があるため、キャストも重要ですE1
。たとえば、a
が タイプのshort
場合、a++
は と同等ではありませんa = a + 1
。a + 1
の型はisであり、キャストなしでint
は変数に割り当てることができないため、後者はコンパイルされません。short
そのため、この場合の仕様では、それa++
は と同等であると述べられていa = (short) ((a) + (1))
ます。a
タイプがchar
orの場合も同様ですbyte
。
x += y;
と同等です
x = x + y;
-=、*=、/= など、他の数学演算にも同様の演算子があります。例えば:
x *= y;
と同等です
x = x * y;
(編集:上記は、xに「副作用」がないことを前提としています。つまり、プレインクリメントまたはポストインクリメント演算子です。Ted Hoppのポイントを反映するように編集されています)
これは、次の省略形です。
a = a + 1;
つまり、a = a + 1
インクリメントa
です。