i ++の一般的な解釈は、最初に割り当ててからインクリメントすることです。実際、ここで割り当てられる値は、オペランドスタックから取得した値です。つまり、iの値が最初にスタックにプッシュされます。
また、自己インクリメントは、ローカル変数テーブルの自己インクリメントの値です。
++ iは逆で、最初にインクリメントされてから割り当てられます。つまり、ローカル変数テーブルがインクリメントされ、ローカル変数テーブルの値がスタックにプッシュされます。
次に、次の5つのサンプル質問を理解して要約できます。転載:i ++と++ iを一目で詳細に理解できます。
例1
int i = 0;
i = i++;
System.out.println("i = " + i);
例2
int a = 2;
int b = (3 * a++) + a;
System.out.println(b);
例3
int a = 2;
int b = a + (3 * a++);
System.out.println(b);
例4
int i = 1;
int j = 1;
int k = i++ + ++i + ++j + j++;
System.out.println(k);
例5
int a = 0;
int b = 0;
a = a++;
b = a++;
System.out.println("a = " + a + ", b = " + b);
回答例
例1:0
例2:9
例3:8
例4:8
例5:a = 1、b = 0
例1詳細な説明
int i = 0;
i = i++;
System.out.println("i = " + i); // 结果:0
最初にi ++を見て、「最初にインクリメントしてから、インクリメント前の値に戻る」という原則に従って、iインクリメント後、i = 1ですが、インクリメント前に値0に戻ると、式はi = 0になります。 0 iに値が割り当てられていない場合、iの値は1ですが、iに0が割り当てられている場合、iの値は再び0になります。したがって、iの値は最終的に同じであるため、i = i ++のコードは役に立たない作業です。
例2の詳細
int a = 2;
int b = (3 * a++) + a;
System.out.println(b); // 结果:9
int b =(3 * a ++)+ a; a ++の後、a = 3であり、インクリメントの前に値2を返すため、この時点での式は次のようになります
。intb =(3 * 2)+ a; aの値この時点ではすでに3であり、式は次の
ようになります 。intb =(3 * 2)+ 3;したがって、b = 9
例3詳細な説明
int a = 2;
int b = a + (3 * a++);
System.out.println(b); // 结果:8
この質問は例2とほぼ同じですが、順序を変更しただけですが、結果が異なるのはなぜですか?これには「式の原則」を使用する必要があります。変数は式でもあり、複数の式の加算と減算計算は次の式から実行されます。左から右へ
intb = a +(3 * a ++);一般の人々の考えによれば、3 * a ++が最初に計算され、最初にaがa = 3ずつインクリメントされ、次にインクリメントが返される前に値2が返されるため、次の場合式は次のようになります
。intb= a +(3 * 2);この時点でaの値は3であり、式は次の
ようになります 。intb = 3 +(3 * 2);結果b =
91つの変数と言います。 複数の式の足し算と引き算の演算は左から右に実行されます。この理論を深く理解していないかもしれませんが、次のようにコードを少し変更すれば理解できます
。intb = (a * 1)+(3 * a ++)このコードはint b = a +(3 * a ++)と同じで、違いはありませんが、(a * 1)を見ると、次のことが必要であることが簡単にわかります。最初に* 1を数えますこの式の場合、式の結果は2です。
したがって、前のa in int b = a +(3 * a ++)は単なる変数ですが、式でもあります。式aと式(3 * a ++)が加算されます。計算はすべて次の式から実行されます。左から右へ、最初に式aを計算すると、式の計算結果は2になるため、式は次のようになります
。intb = 2 +(3 * a ++)次に、aがインクリメントされ、「前の値を2増やす」から返されます。式は次のようになります
。intb= 2 +(3 * 2);したがって、結果は8になります。このとき、aの値は3です。
例4詳細な説明
int i = 1;
int j = 1;
int k = i++ + ++i + ++j + j++;
System.out.println(k); // 结果:8
前の三つの例の詳細な説明では、私はあなたが自分でこれに答えることができると信じてあなたが最初にそれを自分で答え、その結果は、それがない場合は、以下の私の説明を見る8.あるかどうかを確認することができます。
の原則式は、複数の式があることを示しています。加算と減算の操作は左から右に実行されます。ここでの式は、すべて加算であるi ++、++ i、++ j、j ++であり、次の4つの式を計算できます。左から右へ、次のようにOKです
。1。最初にi ++を計算し、i ++の後、iの値は2で、++の前に値1を返すため、式全体は次のようになります
。1+ ++ i + + + j + j ++; // thisiの値は22です
。次に++ iを計算します。++ iの後、iの値は3になり、3が返されるため、式全体は次のようになります
。1+ 3 + ++ j + j ++; //この時点でiの値は33です
。次に++ jを計算します。++ jの後、jの値は2になり、2を返します。したがって、式全体は次のようになります
。1+ 3 + 2 + j ++; //このときのjの値は
24で、j ++を計算します。j++の後、jの値は3で2を返すため、式全体は次のようになります
。1+ 3 + 2 + 2; //結果は8で、jの値は3です。
例5の詳細
int a = 0;
int b = 0;
a = a++;
b = a++;
System.out.println("a = " + a + ", b = " + b); // a = 1, b = 0
質問5に関しては、問題はないようです。誰でも解決できるはずですが、記事を完全にするために、分解します。まず自分で計算してから、分解を見てください。 :
a = a ++; a ++の後、aの値は1で0を返すため、aの値は1から0に戻されますb = a ++; a ++の後、aの値は1で0を返し、0はbに割り当てられているため、bは0であり、aは1のままです。!