Java Silver SE17の勉強中、何度も「インクリメント(++)とデクリメント(–)」の計算に何回解きなおしても解けない今日この頃。
問題集で何回も見かけるはずなのに、いざとなると「どっちが先に増えるんだっけ?」と手が止まってしまう…。
今回はそんな苦手意識から逃げず、仕組みや自分が混乱した理由と一緒に、しっかり向き合ってみることにします。
そもそも「++」と「–」って何?
名前だけはよく出てくるけど、結局どんな動きをするのか――
インクリメント(++)は数値を1増やし、デクリメント(–)は1減らします。
使い方は前置と後置の2パターンあって、それぞれ“どのタイミングで値が変化するか”が違うんです。
前置と後置の違いがややこしい
この「前置(++x / –x)」と「後置(x++ / x–)」、私の場合ここが一番ごちゃごちゃになりました。
- 前置:先に変化させて、その後で値を使う
- 後置:今の値を使ってから、そのあとで変化させる
例えば、
int c = 3;
int d = c++; // dには3が入って、その後cが4になる
ぱっと見は区別がつきにくいし、実際の値の動きを想像すると結構迷います。
for文だと意識せず使っちゃうけど…
for文なら i++
も ++i
も大きな違いはないし、普段は深く考えず使い分けてしまいがち。でも「計算式の中で前置か後置か」が絡んでくると、確信が持てなくなる…。
実際に間違えたパターン
例えば、こんなケース。
int x = 1;
System.out.println(x++); // 1が出力されて、その後xは2に
System.out.println(++x); // 2が3になってから、3が出力される
自分の中では「どっちが先?」と頭が渋滞して何度も問題を見返していました。とりあえず紙に書いて確認しないと安心できないやつ。
苦手な理由を考えてみた
解説や日本語の説明は分かるのに、実際のコードになるとパッと判断できなくなる…。
予想してた出力値と違う結果が返ってくると「え、なんで?」となって、何度も解説を読み直す羽目に。
向き合ってみて、自分なりの対策
- 前置/後置の違いは、とにかく手を動かして表やコメントで整理する
- 不安な問題は一度自分の手で値の流れを書き出してみる
- 迷ったら、その場でコードを書いて実際に動かして確かめる
こうすることで、何となくの記憶じゃなく、実際の動きを自信を持って説明できるようになってきました。
おわりに
インクリメント・デクリメント演算子は、基本のくせして意外と混乱ポイントが多い。
それでも「ちゃんと向き合ってみる」と、少しずつ苦手意識も薄れていきました。
これでどんな問題が出ても、「まずは動きを一つずつ追いかければ大丈夫」と思えるようになった気がします。
鉄板問題だと思うので、同じように悩んでいる人がいたら、一度じっくり向き合ってみるのもおすすめです。