
こんにちは、Java初心者です。どなたか質問タイトルの件で教えていただけませんでしょうか。
Javaのテキストで下のようなものがあったのですが、違いがテキストの説明ではよくわかりませんでした。この場合はどう違うのですか?初心者向けに、参照、演算の詳細なタイミングを一つ一つ教えていただけないでしょうか?前置の方が2になるのはなんとなくわかりそうなのですが、後置はさっぱりなのです。。。
int x, a=1;
x=++a; ⇒xの値は2
int x, a=1,
x=a++1; ⇒xの値は1のまま
また、実例としてはどんな場合に前置又は後置を使うのですか?
よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
単行で使う場合、前置と後置に違いはありません。
例.
++x;
y++;
この場合、行っていることはどちらも同じです。
前置と後置の違いを簡単に書けば「値を変化させるタイミングが違う」ということです。挙げられた式「x = ++a;」と「x = a++;」という式は、以下のように書き換えることができます。
x = ++a;
↓
x = (a + 1);
x = a++;
↓
(x = a) + 1;
つまり、インクリメントを行うタイミングが異なることになります。前置の場合は式(ないしメソッド)の評価を行う前にインクリメントを行い、後置の場合は逆に式(ないしメソッド)の評価を行った後インクリメントを行うことになります。
当然、デクリメントでも同じ結果になります。
実例……。うーん。インクリメントの評価タイミングを意識しておけば、全く同じ内容のプログラムでも前置と後置両方で組めるので、最終的には個人の好みになってしまうような……。
for文中で使うのはひとつの例になるのかな。
蛇足ですが、条件式内にインクリメントを組み込むこともできます。そのとき、前置と後置を意識して書かなければ、思わぬバグに遭遇することもありますからご注意ください。
複数条件式をショートサーキット(&&とか||とか)でくくるとその辺のバグに出会いやすいかも。
回答下さいましてありがとうございます。
x=(a+1)
(x=a)+1
と考えればいいんですね。一人で難しく考えすぎてしまっていました。おかげですっきりしました。確かにfor文中でよく見かけますね。まだ初めて2日なんですが色々理解できるように頑張ってきます。
ありがとうございました!
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行にする必要は無いでしょう
ただ、他の人のプログラムで使われている
可能性があるので、知識として知っておく必要はある
という程度のものと理解しておけば良いかと
回答ありがとうございます。
そうなんですか、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
回答下さいましてありがとうございます。
そうですね、教えていただいたサイトと合わせて勉強させていただきます。
ありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
jsp~jspにhiddenを使って変数...
-
VBAでダブルコーテーション入り...
-
エラーの意味は? Lvalue req...
-
[VBS]変数を定数に変換する方法...
-
テキストボックスの値を変数に...
-
VB6.0での条件文にある#の意味
-
Javaのlong型の最大桁数について
-
インクリメント演算子の前置(+...
-
EXCEL/VBA 変数の値をクリップ...
-
R言語について
-
コマンド実行結果を変数に代入...
-
umu *= 2;てどんな意味があるの...
-
Variant型で宣言してるのにEmpt...
-
ASP+SQLにてSessionがNullになる
-
C言語 exitの使い方
-
excelの、ある数式内の{}の意...
-
VBAの定数の使い方で、計算値を...
-
フリーランタイマーの時間差分...
-
DataGridView 複数行同時変更...
-
Exit Subのような・・・。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでダブルコーテーション入り...
-
エラーの意味は? Lvalue req...
-
jsp~jspにhiddenを使って変数...
-
EXCEL/VBA 変数の値をクリップ...
-
テキストボックスの値を変数に...
-
C言語 アロー演算子について質...
-
整数xxxが大き過ぎますというエ...
-
[VBS]変数を定数に変換する方法...
-
processing エラーで、 "cannot...
-
gridViewの行選択解除
-
Variant型で宣言してるのにEmpt...
-
プログラミングで変数と関数の...
-
C言語
-
DataTableの値を変数に代入したい
-
VB6.0 DataGridでのfirstRowの...
-
DataColumn型の使用方法
-
String型ローカル変数の初期化...
-
VBA 1行で複数の代入を行った...
-
変数宣言と初期値代入の場所に...
-
valueChanged の引数について
おすすめ情報