「++」と「--」 インクリメント演算子とデクリメント演算子

Java Silver

インクリメント演算子とデクリメント演算子とは

インクリメント演算子「++」とデクリメント演算子「--」は、変数の値に対して、1を加算したり、減算したりする演算子です。

記述方法は、変数の前につける「前置」と、変数の後ろにつける「後置」があります。

記述方法名称意味
++num置インクリメント値の取得に「変数num」を「+1」する
num++置インクリメント値の取得に「変数num」を「+1」する
--num置デクリメント値の取得に「変数num」を「-1」する
num--置デクリメント値の取得に「変数num」を「-1」する
全角で「++」「--」を記載しておりますが、正しくは半角です。

インクリメント演算子、デクリメント演算子の使い方

インクリメント演算子、デクリメント演算子には、以下のような使い方があります。

単独で使用した場合

以下は、インクリメント演算子、デクリメント演算子を単独で使用した場合の結果です。

計算としてはインクリメント演算子、デクリメント演算子の計算なのでシンプルです。

int num = 10;
int a = ++num ;
System.out.println(a);

[出力結果]
11
変数numの値「10」を取得する前に「+1」するので、「11」が変数aに代入される。
int num = 10;
int a = num++ ;
System.out.println(a);

[出力結果]
10
変数numの値「10」を取得した後に「+1」するので、「+1」する前の「10」が変数aに代入される。
int num = 10;
int a = --num ;
System.out.println(a);

[出力結果]
9
変数numの値「10」を取得する前に「-1」するので、「9」が変数aに代入される。
int num = 10;
int a = num-- ;
System.out.println(a);

[出力結果]
10
変数numの値「10」を取得した後に「-1」するので、「-1」する前の「10」が変数aに代入される。

他の演算子と組み合わせて使用した場合

インクリメント演算子、デクリメント演算子だけでなく、「+」「-」などの演算子も組み合わせて計算させる場合、「前置」「後置」を意識した計算が必要となります。

int num = 10;
int a = num++ + 10;
System.out.println("a:" + a);
System.out.println("num:" + num);

[出力結果]
a:20
num:11

変数numの値「10」を取得した後に「+1」するので、
「+1」する前の「10」が利用され、
「10 + 10」の計算結果が変数aに代入される。

取得後には「+1」されるので、次に取得するときには「11」となっている。

より理解を深めるために、同じ変数を使って計算してみましょう。

int num = 10;
num = num++ + num;
             
System.out.println(num);

[出力結果]
21


:「num++」は「取得後に+1」なので、変数numから取得する値は「10」です。

:変数numから取得する値は「+1」された「11」ということになり、
  「10 + 11 = 21」が計算されます。

例題

上記を踏まえ、試験の出題例を紹介します。

以下のコードの実行結果として出力される値はいくつか。

public class Hoge {
  public static void main(String[] args){
    int a = 10;
    int b = a++ + a + a-- - a-- + ++a ;
    System.out.println(b);
  }
}

・・・

正解は「32」です。

計算としては以下となります。

int b = a++ + a + a-- - a-- + ++a ; 

⇩ ⇩ ⇩

int b = 10 + 11 + 11 - 10 + 10 ;

可読性は最悪ですよね…。

問題を解く際は、可読性をよくするために、メモに書きだしたりすると良いかもしれません。

計算ミスはもったいないですから…。

コメント

タイトルとURLをコピーしました