Javaのインクリメントとデクリメントについて学習したのでまとめてみたいと思います。
Javaのインクリメントとデクリメントの書き方とそれぞれについて
処理内容 | 構文 | |
---|---|---|
インクリメント | 一つ加算される | 変数++、もしくは、++変数 |
デクリメント | 一つ減産される | 変数--、もしくは、--変数 |
インクリメントに関しては見たことがあると思います。
public class main {
public static void main (String[] args) {
for (int increment = 0; increment < 2; increment++){
System.out.println("increment=" + increment);
}
}
}
このようにJavaでfor文を使ったことがある人であれば、変数++でインクリメントしているところを見たことがあると思います。
ただ、インクリメントもデクリメントには、前置と後置のに種類があります。
それによって挙動がマジで変わるので覚えておきましょう。
前置?後置?何だそれ
ってなったあなた。
これから説明します。
インクリメントとデクリメントの前置と後置について
前置と後置の違いは値が足されるタイミングが違います。
後置と前置はそれ単体で使うときは同じ結果を返します。
int num = 5;
// 後置
num++;
num--;
// 前置
++num;
--num;
ただ、インクリメントした値を別の変数に格納したいときは前置と後置挙動が変わります。
これからそれについて紹介します。
例えば
public class main {
public static void main (String[] args) {
int x = 10;
int y = x++;
System.out.println(y);
}
}
このように、変数xの値絵をインクリメントした値を変数yに代入したら変数yはどのように出力されるでしょう。
答えは
10
です。
なぜかというと、インクリメントされるのと変数に格納されるタイミングがあるからです。
今回の場合は、変数xがインクリメントされる前の値が変数yに代入されてから変数xの値がインクリメントされて変数xの値が更新されます。なので、インクリメントしても変数yの値が11にならないわけです。
では、変数yの値を11にするにはどうしたらいいでしょうか。
それは
public class main {
public static void main (String[] args) {
int x = 10;
int y = ++x;
System.out.println(y);
}
}
このように、++x(後置)にすれば大丈夫です。
こうすることで、変数 x の値を 1 増やしたあとで増えたあとの値が変数 y に代入されます。
では、この声性質を応用して少し練習問題をしましょう。
public class main {
public static void main (String[] args) {
int x = 10;
int y = x++ - x--;
System.out.println(y);
}
}
この場合h、変数yの値はどうなるでしょうか。
正解は
-1
です。
解説をしましょう。
最初のx++では、値は10です。しかし、それが- x--
の段階になる時に、x++でインクリメントされた数が一時変数として残り、その値がx--に代入されるからです。
あれ、じゃあデクリメントされたx−−の値はどうなるんだよってなると思いますが、この場合はその値はこの先の四季で代入される値がないので、今回の場合は使われません。
ちなみに、x--を--xとした場合は値は
0
になります。
以上になります。
ありがとうございました。