0

誰かがこのコード出力がなぜであるかを説明できますか

not equals
not equals 2

最初の if ステートメントでは、a = 0 b/c が後置インクリメントのようです。したがって、a は次の行まで増加しません。しかし、2 つの a が等しくないのはなぜですか? 2番目に、デバッガーを実行したときにaの値が2であるのに、テストが偽である場合、なぜですか?

public static void main (String[] args)
   {
       int a = 0;
       if (a++ == a++) {
           System.out.println("equals");
       } else {
           System.out.println("not equals");
       }

       if (++a == 2) {
           System.out.println("equals 2");
       } else {
           System.out.println("not equals 2");
       }

   } 
4

3 に答える 3

2

次の行まで待機するわけではありません。これ==は「論理」演算子であるため、各辺の式が最初に評価され、それぞれに「a」値をインクリメントする副作用があります。1 番目のインクリメントの結果は LHS で使用され、2 番目の結果は RHS で使用されます。

これらの場合、演算子が 'prefix' か 'postfix' かは問題ではありません

于 2012-11-03T17:03:14.703 に答える
0

編集: first not equalsも要求したことに気付きましたが、これはまだ2番目のものに答えているだけです。

なぜなら

  • aすでに2(すでに2回インクリメントされています)
  • ++a3そうです
  • 3 == 2false評価の前にプレフィックスが適用されるためです。
于 2012-11-03T16:57:28.027 に答える
0

a++(ポスト インクリメント) は最初に a をインクリメントし、それを変数に割り当てます。あなたの最初のケースで

(a++==a++) 最初のポストインクリメントでは、値は最初に 1 ずつインクリメントされますが、まだ割り当てられていませんが、2 番目の a++ に達すると、値が割り当てられ、再びインクリメントされます。

例えば

if say a=0;

(a++==a++) would be (0==1)

したがって、 を評価した後の値は 2 になりifます。

あなたの2番目のケース

(++a==2) here a would be incremented to 3 , (3==2) which is false thus the else if executed
于 2012-11-03T16:57:43.850 に答える