2
int z = 1;
System.out.println(z++ == ++z);
System.out.println(++z == z++);

出力は次のようになります。

false
true

理由がわかりません。これを説明してください。

4

6 に答える 6

10

のオペランドは==左から右に評価され、++優先度が高いため、コードは次のようになります。

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;
于 2012-08-20T11:08:20.957 に答える
5
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
于 2012-08-20T11:04:57.557 に答える
3

演算子==は左側のものを優先します。つまり、2 つの値を操作するため、左側の値が最初に評価されます。

var のラベルの前の演算子++は、インクリメントが値を評価する前に値に割り当てられることを示します。ラベルの後に配置された同じ演算子は、変数の値が評価後に 1 ずつインクリメントされることを意味します。

コードの2行目について:

  • オペレーター==は左側を見る
  • 演算子は次のように評価zします1
  • 演算子は左側の部分を処理しましたが、インクリメントが行われたのは、z++それがちょうどそれを言っているためです。インクリメントzは評価された後なので、今zは演算子によって として2評価されます。覚えておいてください。==1
  • オペレーター==は右側を見る
  • 演算子は、zのためにインクリメントを行わずに何が入っているかを評価できません。これは、 が次のように評価される++zことを意味します。z3

1 != 3。

次の行にも同じ概念が適用されます。

于 2012-08-20T11:18:50.197 に答える
0
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

于 2012-08-20T11:03:42.183 に答える
0

ステートメント ++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);

これは本当です。

于 2014-02-25T06:28:35.067 に答える
0

まず、プレインクリメントとポストインクリメントについて明確にする必要があります。

int i=1;
int j=i++;
int k=++i;

ここでjwill be1kwill beの値3

なぜというのは、最初に値をi++格納し、その後にその値をインクリメントすることを意味しますiji

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したがって、ステートメントはfalseokを出力します:)そして2番目のケース

System.out.println(++z == z++);

++zこれからも4これからz++4そうですので、 true クリアできますように...

于 2012-08-21T10:14:28.747 に答える