int z = 1;
System.out.println(z++ == ++z);
System.out.println(++z == z++);
出力は次のようになります。
false
true
理由がわかりません。これを説明してください。
int z = 1;
System.out.println(z++ == ++z);
System.out.println(++z == z++);
出力は次のようになります。
false
true
理由がわかりません。これを説明してください。
のオペランドは==
左から右に評価され、++
優先度が高いため、コードは次のようになります。
int z = 1;
int tmp1 = z++; //tmp1 = 1 / z = 2
int tmp2 = ++z; //tmp2 = 3 / z = 3
System.out.println(tmp1 == tmp2);
tmp1 = ++z; //tmp1 = 4 / z = 4
tmp2 = z++; //tmp2 = 4 / z = 5
System.out.println(tmp1 == tmp2);
と の違いを理解していると思いz++
ます++z
。
tmp1 = z++;
次のように分類できます。tmp1 = z; z = z + 1;
tmp2 = ++z;
次のように分類できます。z = z + 1; tmp2 = z;
int z = 1;
System.out.println(z++ == ++z);
System.out.println(++z == z++);
z++ はポスト インクリメントで、++z はプリインクリメントです。ポストインクリメントは式が評価された後に値を増やし、プリインクリメントは式が評価される前に値を増やします。
したがって、
int z = 1;
System.out.println(z++ == ++z); // 1 == 3 false
System.out.println(++z == z++);// 4 == 4 true
演算子==
は左側のものを優先します。つまり、2 つの値を操作するため、左側の値が最初に評価されます。
var のラベルの前の演算子++
は、インクリメントが値を評価する前に値に割り当てられることを示します。ラベルの後に配置された同じ演算子は、変数の値が評価後に 1 ずつインクリメントされることを意味します。
コードの2行目について:
==
は左側を見るz
します1
z++
それがちょうどそれを言っているためです。インクリメントz
は評価された後なので、今z
は演算子によって として2
評価されます。覚えておいてください。==
1
==
は右側を見るz
のためにインクリメントを行わずに何が入っているかを評価できません。これは、 が次のように評価される++z
ことを意味します。z
3
1 != 3。
次の行にも同じ概念が適用されます。
System.out.println(z++ == ++z); // 1 == 3 is false
System.out.println(++z == z++); // 4 == 4 is true
ポストインクリメント値を使用している間、一時変数「tmp」にコピーされます。ここでポストインクリメントを確認してください。z++ == ++z
=> は false と評価されます1 == 3
。これで z は 3 です。
2番目の式 : に来て++z == z++
、再び : ++z は 4 になり、z++ の場合、値はtmp
変数にコピーされ、 で使用されz++
ます。式は4 == 4
どちらが真で、最終値はz is 5
ステートメント ++z は z のインクリメントされた値を返しますが、z++ はインクリメント前の前の値を返しますが、z++ 式が戻った後の z の値は z のインクリメントされた値です。
それで
int z = 1; // Line 1
System.out.println(z++ == ++z); // Line 2
System.out.println(++z == z++); // Line 3
2 行目では、z++ は 1 を返し、返されると z の値がインクリメントされるため、z は 2 になり、++z は返す前に値をインクリメントするため、z は 3 になります。したがって、2 行目は
System.out.println(1 == 3);
これはfalseです。
行 3 で、++z は 4 に評価され (z の前の値は 3 であるため)、z++ は再び z の前の値、つまり 4 を返しますが、z は現在 5 です。したがって、3行目は
System.out.println(4 == 4);
これは本当です。
まず、プレインクリメントとポストインクリメントについて明確にする必要があります。
int i=1;
int j=i++;
int k=++i;
ここでj
will be1
とk
will beの値3
なぜというのは、最初に値をi++
格納し、その後にその値をインクリメントすることを意味しますi
j
i
j=1,i=2 ok :)
ここで++i
、最初に値をインクリメントし、その後に格納するk
場合
k=3,i=3 ok :)
今あなたの質問に来ています
int z = 1; System.out.println(z++ == ++z);
何が起こるか教えてくださいz++
。1 OK :) したがって++z
、 ? 3
したがって、ステートメントはfalse
okを出力します:)そして2番目のケース
System.out.println(++z == z++);
++z
これからも4
これからz++
も4
そうですので、 true
クリアできますように...