• ベストアンサー

インクリメント演算子の前置(++a)と後置(a++)の違い

こんにちは、Java初心者です。どなたか質問タイトルの件で教えていただけませんでしょうか。 Javaのテキストで下のようなものがあったのですが、違いがテキストの説明ではよくわかりませんでした。この場合はどう違うのですか?初心者向けに、参照、演算の詳細なタイミングを一つ一つ教えていただけないでしょうか?前置の方が2になるのはなんとなくわかりそうなのですが、後置はさっぱりなのです。。。 int x, a=1; x=++a; ⇒xの値は2 int x, a=1, x=a++1; ⇒xの値は1のまま また、実例としてはどんな場合に前置又は後置を使うのですか? よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • com58
  • ベストアンサー率37% (3/8)
回答No.1

単行で使う場合、前置と後置に違いはありません。 例. ++x; y++; この場合、行っていることはどちらも同じです。 前置と後置の違いを簡単に書けば「値を変化させるタイミングが違う」ということです。挙げられた式「x = ++a;」と「x = a++;」という式は、以下のように書き換えることができます。 x = ++a; ↓ x = (a + 1); x = a++; ↓ (x = a) + 1; つまり、インクリメントを行うタイミングが異なることになります。前置の場合は式(ないしメソッド)の評価を行う前にインクリメントを行い、後置の場合は逆に式(ないしメソッド)の評価を行った後インクリメントを行うことになります。 当然、デクリメントでも同じ結果になります。 実例……。うーん。インクリメントの評価タイミングを意識しておけば、全く同じ内容のプログラムでも前置と後置両方で組めるので、最終的には個人の好みになってしまうような……。 for文中で使うのはひとつの例になるのかな。 蛇足ですが、条件式内にインクリメントを組み込むこともできます。そのとき、前置と後置を意識して書かなければ、思わぬバグに遭遇することもありますからご注意ください。 複数条件式をショートサーキット(&&とか||とか)でくくるとその辺のバグに出会いやすいかも。

mstmk1111
質問者

お礼

回答下さいましてありがとうございます。 x=(a+1) (x=a)+1 と考えればいいんですね。一人で難しく考えすぎてしまっていました。おかげですっきりしました。確かにfor文中でよく見かけますね。まだ初めて2日なんですが色々理解できるように頑張ってきます。 ありがとうございました!

その他の回答 (2)

  • nak777r
  • ベストアンサー率36% (49/136)
回答No.3

式を分けて書くと x=++a; ↓ a=a+1; x=a; x=a++; ↓ x=a: a=a+1; こんな感じ ++a は先にaをインクリメント a++ は後でaをインクリメント 実例としては、x=a++; や x=++a;のような 使い方はプログラムの可読性が悪くなるので 初心者は、基本使わない a++; x=a; や x=a; a++; の様に分けて書く 無理して1行にする必要は無いでしょう ただ、他の人のプログラムで使われている 可能性があるので、知識として知っておく必要はある という程度のものと理解しておけば良いかと

mstmk1111
質問者

お礼

回答ありがとうございます。 そうなんですか、2つに分けて考えて書く方法もあるんですね!まずは読めるようになることなのでしっかり理解しておかないとですね。 ありがとうございました!

回答No.2

1) int x, a=1; x=++a; → a=a+1演算後にxにaの値を代入する(この場合xには2が代入される) 実行後 x=2 a=2 2) int x, a=1, x=a++; → xにaの値を代入後a=a+1を演算する(この場合xには1が代入される) 実行後 x=1 a=2 となります。 使い方はケースバイケース。 このへんの話は最も基礎的な部分ですので初心者向けサイトを見たほうがより正確な答えが得られるかと思います。 インクリメント/デクリメント演算子 http://msugai.fc2web.com/java/ope.html

mstmk1111
質問者

お礼

回答下さいましてありがとうございます。 そうですね、教えていただいたサイトと合わせて勉強させていただきます。 ありがとうございました!

関連するQ&A