Rynのページ(商業高校情報教育研究室)
物凄く乱暴なJavaに関する用語(基本文法)
詳しくは公式マニュアルをお読みください。
Javaって、こんな風にも書ける、とか、こうとも言う、とか、色々有るので、
以下は雰囲気だけのざっくりとした説明です。
作成中です。ミス有ったら後免。
インクリメント/デクリメント演算子
a++
++ は、1を加算することをあらわす演算子。
a++ は、a=a+1 と同じ。
変数の値に1を加算していくことをインクリメントと言う。
a--
-- は、1を減算することをあらわす演算子。
a-- は、a=a-1 と同じ。
変数の値に1を減算していくことをデクリメントと言う。
[備考1] 後置演算 a++ と 前置演算 ++a
重要なので、備考2も必読のこと。
a++ の様に変数の後に演算子が来る様なものを「後置演算」、
++a の様に変数の前に演算子が来る様なものを「前置演算」と言い、
単独で使う場合には結果は同じだが、
他の式と組み合わせて使用する場合は違いが有るので要注意。
a++は、aの値を取り出してから元のaをインクリメントするが、
++aは、aの値をインクリメントしてから、その値を取り出す。
下の例はa++で後置演算なので、
aの値をbに代入した後、aに1を加算したことになり、aは3、bは2になる。
以下は、大雑把なイメージです。
※実際は、優先順位は、++が先、=は後。結果的に、そう見える、ということに注意。
int a = 2; int a = 2;
int b = a++; → int b = a;
a = a + 1;
++a の場合は、aに1を加算したものをaとしbに代入したことになり、aもbも3になる。
int a = 2; int a = 2;
int b = ++a; → a = a + 1;
int b = a;
[備考2] a=a++ は、何故アホなのか
a++は、aの値を取り出した後のインクリメントであり、
また、右辺の++は=よりも優先順位が高いため先に処理される。
上のa++の例をもう少し細かく書くと、以下の様になる。
以下はイメージです。
int a = 2; int a = 2;
int b = a++; → int tmp = a;
a = a + 1;
int b = tmp;
アホなコードとしてプログラマでは有名な、
a = a++;
は、aの値は左辺へ代入されるが、
aのインクリメントは反映されない。結果としてaは変化しない。
以下はイメージです。
int a = 2; int a = 2;
a = a++; → int tmp = a;
a = a + 1;
a = tmp;
a = ++a; は、左辺への代入が無効になるが、aのインクリメントはされるため、結果としてaは変化する。
int a = 2; int a = 2;
a = ++a; → a = a + 1;
a = a; … 無効
ってか、
普通に、a++; って、書いてよ!