みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

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

int x, a=1;
x=++a; ⇒xの値は2

int x, a=1,
x=a++1; ⇒xの値は1のまま

また、実例としてはどんな場合に前置又は後置を使うのですか?

よろしくお願いいたします。

投稿日時 - 2009-02-27 10:09:35

QNo.4753046

困ってます

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

単行で使う場合、前置と後置に違いはありません。
例.
++x;
y++;
この場合、行っていることはどちらも同じです。

前置と後置の違いを簡単に書けば「値を変化させるタイミングが違う」ということです。挙げられた式「x = ++a;」と「x = a++;」という式は、以下のように書き換えることができます。

x = ++a;

x = (a + 1);

x = a++;

(x = a) + 1;

つまり、インクリメントを行うタイミングが異なることになります。前置の場合は式(ないしメソッド)の評価を行う前にインクリメントを行い、後置の場合は逆に式(ないしメソッド)の評価を行った後インクリメントを行うことになります。
当然、デクリメントでも同じ結果になります。

実例……。うーん。インクリメントの評価タイミングを意識しておけば、全く同じ内容のプログラムでも前置と後置両方で組めるので、最終的には個人の好みになってしまうような……。
for文中で使うのはひとつの例になるのかな。

蛇足ですが、条件式内にインクリメントを組み込むこともできます。そのとき、前置と後置を意識して書かなければ、思わぬバグに遭遇することもありますからご注意ください。
複数条件式をショートサーキット(&&とか||とか)でくくるとその辺のバグに出会いやすいかも。

投稿日時 - 2009-02-27 10:28:20

お礼

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

投稿日時 - 2009-03-01 00:03:26

ANo.1

このQ&Aは役に立ちましたか?

3人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.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行にする必要は無いでしょう

ただ、他の人のプログラムで使われている
可能性があるので、知識として知っておく必要はある
という程度のものと理解しておけば良いかと

投稿日時 - 2009-02-27 11:02:59

お礼

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

投稿日時 - 2009-03-01 00:10:03

ANo.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

投稿日時 - 2009-02-27 10:43:33

お礼

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

投稿日時 - 2009-03-01 00:07:04

あなたにオススメの質問