初歩的な質問申し訳ありません。
下記コードで質問なですが、numという変数の前置き、後置きインクリメントで
代入式は「左辺を評価する」「右辺を評価する」「代入する」の順序で処理が進むとおもうのですが、
下記コードでは
num=num++;の部分では、左辺が評価された後に、右辺のnum++;でここでは1を使用しているので先に1を左辺に代入した後に
+1されると認識していたのですが、なぜ同じ数字が出力されるのでしょうか?
ご教授いただけると幸いです。
int num = 1; int n; for(int a = 0; a < 5 ; a++){ num=num++; System.out.println(num);
出力結果
1
1
1
1
1
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
後置インクリメントは、代入した後(文の実行が終わった後)でもなく、代入の右辺を評価し終わった後でもなく、n++
を評価した直後に行われます。
Javaの被演算項の評価は左から順番に行われますので、例えば、
Java
1n = 1; 2n += n++ * n;
の2行目だと、まず代入左辺のn
の値が1
と評価され、n++
が1
と評価され、直後にn
が2
になり、次に乗算右項のn
が2
と評価されます。n
には1+1*2
の3
が代入されます。
投稿2021/12/11 12:11
総合スコア84808
0
変数をひとつ用意して、num = num++
の結果をふたつのステップにわけてみては?
java
1public class xxHoge { 2 public static void main(final String[] args) { 3 int num = 1; 4 for (int a = 0; a < 5; a++) { 5 // num=num++; 6 // System.out.println(num); 7 System.out.println(String.format(" -- a:%s", a)); 8 final int tmp = num++; 9 System.out.println(String.format(" tmp = num++; ... tmp:%d, num:%d", tmp, num)); 10 num = tmp; 11 System.out.println(String.format(" num = tmp; ... tmp:%d, num:%d", tmp, num)); 12 } 13 } 14}
// -- a:0 // tmp = num++; ... tmp:1, num:2 // num = tmp; ... tmp:1, num:1 // -- a:1 // tmp = num++; ... tmp:1, num:2 // num = tmp; ... tmp:1, num:1 // -- a:2 // tmp = num++; ... tmp:1, num:2 // num = tmp; ... tmp:1, num:1 // -- a:3 // tmp = num++; ... tmp:1, num:2 // num = tmp; ... tmp:1, num:1 // -- a:4 // tmp = num++; ... tmp:1, num:2 // num = tmp; ... tmp:1, num:1
投稿2021/12/11 14:03
総合スコア3990
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
https://teratail.com/questions/190557#reply-283033
こちらの回答がとても参考になると思いますので、是非ご覧になってください。
int num = 1;
num = num++
まず num++ が評価されます これは1ですね。
num = 1 ;となります。
しかし、num++はnumの値1を返すと同時にnumの値を1増やします。
numの値は 2になります。
しかし num = num++ の式としては num = 1 ;
変数numに1を代入する のまま変わらないので
num の値は1になります。
代入後にnumの値が加算されるわけではありません。
num=num++ + num ;
を考えると わかりやすいと思います。
まずnum++が評価されるので
num = 1 + num ;
そしてnum++ なので numの値は1増えて2になります。
右辺の「num」の値は2となっているので
num = 1 + 2; となる。
numに1+2が代入されnumの値は3となります。
num++ はnumの値を返し、同時にnumの値を1増やすと考えるとよいかと思います。
投稿2021/12/11 11:33
総合スコア509
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/12/11 13:28
2021/12/11 13:39
2021/12/11 14:01
2021/12/11 14:02
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/12/11 23:37