この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 3codaddictが特定のスニペットを説明します。
どちらの場合も最初に値を計算しますが、ポストインクリメントでは古い値を保持し、計算後にそれを返します
++ 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を取得します。
++aa評価される前に増加します。
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が最後に印刷されます。
場合a5は、次いで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: 29a=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)