この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 = 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++
また、(バックグラウンドで)値をインクリメントしますが、変数の変更されていない値を返します-後で実行されたように見えます。
int a = 1; int b = a++; int c = ++b;
ポストインクリメントなので、bが1であると期待していました。
++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
a ++
i = ++a + ++a + a++;
です
i = 6 + 7 + 7
動作中:aを6(現在値6)にインクリメント+ aを7(現在値7)にインクリメント。Sumは13になり、a(= 7)の現在の値に加算され、aが8にインクリメントされます。Sumは20で、割り当てが完了した後のaの値は8です。
i = a++ + ++a + ++a;
です
i = 5 + 7 + 8
作業中:aの開始時の値は5です。これを加算で使用してから、6(現在の値6)にインクリメントします。+の他のオペランドを取得するには、現在の値を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; 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は、次いでa++
発現および増分に5を与えa
つつ、その後++a
の増分a
(与える式に番号を渡す前に、a
この場合の式に6)。
だからあなたは計算する
i = 6 + 7 + 7
i = 5 + 7 + 8
ただし、すべてのステートメントを組み合わせて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
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
ワーキング:プリ/ポストインクリメントのように解決されますので、最初の前のすべての増分の関連性、および前「左から右」のポストよりも優先され、持ってい(++a + ++a) => 7 + 6
.thenはa=7
ポストインクリメントに提供=>される7 + 7 + 6 =20
とa =8
。
これらすべてのステートメントを異なる方法で
一緒に実行すると、結果は次のようになります=> 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)