このJavaコードの出力について説明していただけますか?
int a=5,i;
i=++a + ++a + a++;
i=a++ + ++a + ++a;
a=++a + ++a + a++;
System.out.println(a);
System.out.println(i);
どちらの場合も出力は20です。
このJavaコードの出力について説明していただけますか?
int a=5,i;
i=++a + ++a + a++;
i=a++ + ++a + ++a;
a=++a + ++a + a++;
System.out.println(a);
System.out.println(i);
どちらの場合も出力は20です。
++a
インクリメントしてから変数を使用します。
a++
変数を使用してからインクリメントします。
あなたが持っている場合
a = 1;
そしてあなたはする
System.out.println(a++); //You will see 1
//Now a is 2
System.out.println(++a); //You will see 3
codaddictが特定のスニペットについて説明します。
これは役に立ちますか?
a = 5;
i=++a + ++a + a++; =>
i=6 + 7 + 7; (a=8)
a = 5;
i=a++ + ++a + ++a; =>
i=5 + 7 + 8; (a=8)
重要な点は++a
、値をインクリメントしてすぐに返すことです。
a++
また、(バックグラウンドで)値をインクリメントしますが、変数の変更されていない値を返します-後で実行されるように見えます。
どちらの場合も、最初に値を計算しますが、インクリメント後は古い値を保持し、計算後にそれを返します
++ a
a ++
i = ++a + ++a + a++;
は
i = 6 + 7 + 7
動作中:aを6(現在の値6)にインクリメント+ aを7(現在の値7)にインクリメントします。合計は13になり、現在のa(= 7)の値に加算してから、aを8にインクリメントします。合計は20で、割り当てが完了した後のaの値は8です。
i = a++ + ++a + ++a;
は
i = 5 + 7 + 8
動作中:aの開始値は5です。加算で使用してから、6(現在の値6)にインクリメントします。aを現在の値6から7にインクリメントして、+の他のオペランドを取得します。合計は12で、aの現在の値は7です。次にaを7から8にインクリメントし(現在の値= 8)、それを前の合計12に加算して20を取得します。
++a
a
評価される前に
増分します。a++
評価a
してからインクリメントします。
与えられたあなたの表現に関連して:
i = ((++a) + (++a) + (a++)) == ((6) + (7) + (7)); // a is 8 at the end
i = ((a++) + (++a) + (++a)) == ((5) + (7) + (8)); // a is 8 at the end
上で使用した括弧は、Javaによって暗黙的に使用されます。このように用語を見ると、簡単にわかります。どちらも可換であるのと同じです。
上記の例では
int a = 5,i;
i=++a + ++a + a++; //Ans: i = 6 + 7 + 7 = 20 then a = 8
i=a++ + ++a + ++a; //Ans: i = 8 + 10 + 11 = 29 then a = 11
a=++a + ++a + a++; //Ans: a = 12 + 13 + 13 = 38
System.out.println(a); //Ans: a = 38
System.out.println(i); //Ans: i = 29
++ aはプレフィックスインクリメント演算子です:
a ++は接尾辞インクリメント演算子です:
ルールを覚えたら、EZ for yaがすべてを計算します!
ただし、すべてのステートメントを組み合わせてJava 8.1で実行すると、異なる答えが得られると思います。少なくとも、私の経験ではそうです。
コードは次のように機能します。
int a=5,i;
i=++a + ++a + a++; /*a = 5;
i=++a + ++a + a++; =>
i=6 + 7 + 7; (a=8); i=20;*/
i=a++ + ++a + ++a; /*a = 5;
i=a++ + ++a + ++a; =>
i=8 + 10 + 11; (a=11); i=29;*/
a=++a + ++a + a++; /*a=5;
a=++a + ++a + a++; =>
a=12 + 13 + 13; a=38;*/
System.out.println(a); //output: 38
System.out.println(i); //output: 29
あなたが意味したと仮定して
int a=5; int i;
i=++a + ++a + a++;
System.out.println(i);
a=5;
i=a++ + ++a + ++a;
System.out.println(i);
a=5;
a=++a + ++a + a++;
System.out.println(a);
これは次のように評価されます。
i = (6, a is now 6) + (7, a is now 7) + (7, a is now 8)
したがって、iは6 + 7 + 7 = 20であるため、20が出力されます。
i = (5, a is now 6) + (7, a is now 7) + (8, a is now 8)
したがって、iは5 + 7 + 8 = 20であるため、20が再度出力されます。
a = (6, a is now 6) + (7, a is now 7) + (7, a is now 8)
そして、右側のすべてが評価された後(aを8に設定することを含む)、次にaが6 + 7 + 7 = 20に設定されるため、最後に20が印刷されます。
a
が5の場合、式に5を与え、その後インクリメントa++
しますa
。一方、式に数値を渡す前に++a
インクリメントします(この場合、式に6を与えます)。a
a
だからあなたは計算します
i = 6 + 7 + 7
i = 5 + 7 + 8
事前インクリメントとは、式で評価される前に変数がインクリメントされることを意味します。ポストインクリメントとは、式での使用が評価された後に変数がインクリメントされることを意味します。
したがって、注意深く見ると、3つの割り当てすべてが算術的に同等であることがわかります。
式にない場合、pre-incrementとpostincrementは同等です
int j =0;
int r=0
for(int v = 0; v<10; ++v) {
++r;
j++;
System.out.println(j+" "+r);
}
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
これらすべてのステートメントを異なる方法
で一緒に実行すると、結果は=> 38、29になると思います。
int a=5,i;
i=++a + ++a + a++;
//this means i= 6+7+7=20 and when this result is stored in i,
//then last *a* will be incremented <br>
i=a++ + ++a + ++a;
//this means i= 5+7+8=20 (this could be complicated,
//but its working like this),<br>
a=++a + ++a + a++;
//as a is 6+7+7=20 (this is incremented like this)
a=5; i=++a + ++a + a++;
は
i = 7 + 6 + 7
動作:pre / postインクリメントには「右から左」の結合性があり、preはpostよりも優先されるため、最初にpreインクリメントはとして解決され(++a + ++a) => 7 + 6
ます。次に、a=7
インクリメント=>7 + 6 + 7 =20
およびをポストするために提供されますa =8
。
a=5; i=a++ + ++a + ++a;
は
i=7 + 7 + 6
動作:pre / postインクリメントには「右から左」の結合性があり、preはpostよりも優先されるため、まずpreインクリメントは次のように解決されます。(++a + ++a) => 7 + 6
次にa=7
postインクリメント=>7 + 7 + 6 =20
およびa =8
。