インクリメント演算子とデクリメント演算子には前置きパターンと後置きパターンがある。「a++」「++a」のような形だ。
これらは一見同じように「1を加える」というだけなのだが、意味合いが変わってくる。このページでは前置と後置の違いについてお伝えしよう。
インクリメント・デクリメントの前置と後置の使い方
インクリメント・デクリメントとは?については、下記で詳しい。
Javaのインクリメント演算子とデクリメント演算子は、オペランド(演算の対象となる変数)の左か右に置かれる。
インクリメント演算子「++」は、オペランドの左にあっても右にあってもオペランドの値に1増やす。デクリメント演算子「--」は、オペランドの左にあっても右にあってもオペランドの値から1減らす。
これらの演算子が前にあるか後ろにあるかの違いは、ただひとつだ。
オペランドの前にあれば、式の中でオペランドの値は増やされたり減らされたりした後の値が用いられる。
一方、オペランドの右にあれば、式の中でオペランドの値は増やされたり減らされたりする前の値が用いられる。
これだけだとわかりにくいので、前置と後置の詳細を見ていこう。
前置
オペランドの左に演算子を置く書き方を「前置」と呼ぶ。式の中で、オペランドの値は演算子による演算後の値が用いられる。
書き方の基本はこうだ。
++オペランド;
--オペランド;
後置
オペランドの右に演算子を置く書き方を「後置」と呼ぶ。式の中で、オペランドの値は演算子による演算前の値が用いられる。
書き方の基本はこうだ。
オペランド++;
オペランド--;
サンプルプログラムで確認する
このサンプルプログラムは、演算が終わった後の値(value)と、演算結果(result)つまり式の中の値を比較している。前置と後置ではそれぞれ値が違う。その違いを理解しよう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
public class IncrementDecrement { public static void main (String[] args) { int result;//[1] int value;//[2] value = 3;//[3] result = ++value;//[4] System.out.println("[5] ++value -> value = " + value + ", result = " + result); value = 3;//[6] result = value++;//[7] System.out.println("[8] value++ -> value = " + value + ", result = " + result); value = 3;//[9] result = --value;//[10] System.out.println("[11] --value -> value = " + value + ", result = " + result); value = 3;//[12] result = value--;//[13] System.out.println("[14] value-- -> value = " + value + ", result = " + result); } } |
実行結果
下記のような結果になる。なんとなく違いがわかるようになっただろうか?
1 2 3 4 |
[5] ++value -> value = 4, result = 4 [8] value++ -> value = 4, result = 3 [11] --value -> value = 2, result = 2 [14] value-- -> value = 2, result = 3 |
サンプルプログラムの説明
それでは簡単にプログラムの解説をしてゆこう。
- [4] resultに++valueを代入する。
- [5] resultを表示する。
- [6] valueに3を代入する。
- [7] resultにvalue++を代入する。
- [8] resultを表示する。
- [9] valueに3を代入する。
- [10] resultに--valueを代入する。
- [11] resultを表示する。
- [12] valueに3を代入する。
- [13] resultにvalue--を代入する。
- [14] resultを表示する。
まとめ
このページではインクリメントとデクリメントの前置と後置の違いについてお伝えした。挙動に違和感を感じたら、この点、再度確認してみよう。
プログラミング初心者です。
Javaを勉強していてたどり着きました。
後置の説明の前半で誤りがあるように思うのですが、
おっしゃる通りですね。ありがとうございます。修正したします。