前置と後置
インクリメント演算子とデクリメント演算子にはそれぞれ前置と後置の二種類が用意されています。
インクリメント演算子の前置きと後置きは次のようになります。
前置: ++変数 後置: 変数++
デクリメント演算子の前置きと後置きは次のようになります。
前置: --変数 後置: 変数--
前置であっても後置であってもインクリメント演算子は対象の変数の値を1だけ増加させ、デクリメント演算子の場合は対象の変数の値を1だけ減少させることに違いはありません。次の例を見て下さい。
int a = 7; a++; System.out.println(a); // 8 ++a; System.out.println(a); // 9
前置であっても後置であってもこのような使い方の場合には同じ結果となります。
前置と後置で結果が異なる場合
では前置と後置で結果が異なる場合について確認します。次の例を見て下さい。
int a = 7; int b; b = a++; System.out.println(a); System.out.println(b);
後置のインクリメント演算子を使っています。この場合は次のように実行されます。
int a = 7; int b; b = a; a = a + 1; System.out.println(a); // 8 System.out.println(b); // 7
後置のインクリメント演算子の場合、まずインクリメント演算子が書かれていないかのように文が実行されます。今回の場合であれば変数「b」に変数「a」を代入していますので数値の7が変数「b」に代入されます。それから変数「a」の値を1だけ増加させます。
では次の例を見て下さい。
int a = 7; int b; b = ++a; System.out.println(a); System.out.println(b);
前置のインクリメント演算子を使っています。この場合は次のように実行されます。
int a = 7; int b; a = a + 1; b = a; System.out.println(a); // 8 System.out.println(b); // 8
前置のインクリメント演算子の場合、まず対象の変数を1だけ増加させます。よって変数「a」の値が8となります。それからインクリメント演算子を除いた文の実行をします。今回の場合であれば変数「b」に変数「a」を代入していますので数値の8が変数「b」に代入されます。
今回の場合はインクリメント演算子と代入が含まれる場合でしたが、「a++;」や「--b;」などのよう文でない場合には前置と後置で結果が異なる場合がありますので注意して下さい。
サンプル
では簡単なサンプルで試してみます。
class JSample7_1{ public static void main(String args[]){ int num; System.out.println("後置の場合"); num = 10; System.out.println(num++); System.out.println(num); System.out.println("前置の場合"); num = 10; System.out.println(++num); System.out.println(num); } }
コンパイル後に実行すると次のように表示されます。
( Written by Tatsuo Ikura )