Thinkers'Studio
JavaとC言語の自習ツール
演算子の前置と後置( ++, -- )(Java版)

++ (インクリメント演算子)、-- (デクリメント演算子)

 値を 1 だけ増やす ++、1 減らす -- は項をひとつ取る単項演算子で、前置後置の使い方があります。
 処理を 1文で書く次のような場合は、それぞれ同じ結果となります。
  ++n; (前置) と n++; (後置)    文実行後のnは同じ
  --n; (前置) と n--; (後置)    文実行後のnは同じ
 しかし、前置と後置には違いがあります。
 「前置」は先に 1 増(減)してからその変数を使い、「後置」は使ったあとに 1 増(減)します。
 たとえば、結果を変数に代入する場合は結果が変わります。
  x = ++n; (前置) と x = n++; (後置)   xは後置より前置の結果が1大きい
  x = --n; (前置) と x = n--; (後置)   xは後置より前置の結果が1小さい

 「n を増減した値を代入する」のと、「先に x に代入してから n を増減する」のでは、処理が異なります。
 この違いを理解して、++ (インクリメント演算子)、-- (デクリメント演算子)を正しく使いこなしましょう。

(今回のクイズです)
 次のプログラムでは、3種類の処理をそれぞれ前置、後置の両方で書いています。
 実行したとき、System.out.println の前置や後置に続いて表示される値が異なるのは (1)〜(3) のうち何番でしょう?
 答えはひとつとは限りません。
class IncreTest {
    public static void main( String[] args ) {
        int n, x;
    
        for( n = 0; n < 5; ++n )
            System.out.println( "Hello!" );
        System.out.println( "(1)前置 " + n );
        for( n = 0; n < 5; n++ )
            System.out.println( "Hello!" );
        System.out.println( "(1)後置 " + n );

        n = 5;
        x = 60/++n;
        System.out.println( "(2)前置 " + x );
        n = 5;
        x = 60/n++;
        System.out.println( "(2)後置 " + x );

        n = 5;
        x = 3*(++n);
        System.out.println( "(3)前置 " + x );
        n = 5;
        x = 3*(n++);
        System.out.println( "(3)後置 " + x );
    }
}
   (答えは、次回の Java の Tips で ・・・)
前回のクイズの答え:  (前回の問題を見る
実行結果は次の通りです。5月の 2ヶ月遅れは、7月でなく 52月と表示されます。
 誕生月は5月
 誕生月は52月
(その理由は)
2つめの文を表示するのは次の処理です。 System.out.println( "誕生月は" + month + 2 + "月" );
( ) 中の演算子は + のみで優先順位は同じなので、左から順に評価されます。最初の "誕生月は" が文字列なので、+ の横の month は文字列として連結されます。 month の値 5 と 2 の加算としては評価されません。