2012-01-11 6 views
55

私はいくつかのモックを見ていたOCJP質問。私は本当にわかりやすい構文を見つけました。ここでは、次のとおりです。!=と=の違いは何ですか? Javaで?

class OddStuff { 
    public static void main(String[] args) { 
     boolean b = false; 
     System.out.println((b != b));// False 
     System.out.println((b =! b));// True 
    } 
} 

なぜ!==!間の出力変化?

+4

bに 'true'を代入すると、両方ともfalseを返すことに注意してください。 –

+16

空白が足りない空白が多すぎる –

+0

JavaとC++を書いている同じプログラマ。見てみましょうhttp://stackoverflow.com/questions/21029174/whats-this-operator:P –

答えて

110

質問はちょうど混乱しているスペースであなたと遊んでいます。

b != bは、通常は!=(等しくない)の比較です。一方

b =! bが良好として解析されb = !bとして書き込まれる。

b = (!b) 

したがってこれは、2つの演算子です。

  1. 最初に反転b
  2. 次に、bに割り当てます。

割り当て演算子は、割り当てられた値を返します。したがって、(b =! b)が真であると評価されます。これがあなたが印刷するものです。

+4

正しい(b =!b)対(b!= b) – Neutralizer

+2

私は割り当てがわからなかったそのようにしてください。 – prometheuspk

+1

@ Prometheus87はい、代入文をステートメントの中に入れることができます。 – Mysticial

9

b=!bは割り当てです。 b!bに割り当て、式は結果の値であるtrueと評価されます。

3

b =! b

あなたは割り当てをしていますが、Bは!Bの値を持つべきです。

B = B

Bが

10

b != b Bと異なる場合は、求めているが! (b == b)を意味します!b == bの反対を。

b =! bは、実際にはb = !bです。それはbの値をトグルしています。代入は式の値に評価されるため、!bと評価されます(bの値が変更されています)。

関連する問題