Wat is het verschil tussen != en =! op Java?

Ik was wat nep OCJPvragen aan het doornemen. Ik kwam een ​​echt verbijsterende syntaxis tegen. Hier is het:

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

Waarom verandert de uitvoer tussen !=en =!?


Antwoord 1, autoriteit 100%

De vraag is gewoon met je spelen met verwarrende spaties.

b != bis de gebruikelijke !=(niet gelijk aan) vergelijking.

Aan de andere kant:

b =! bkan beter worden geschreven als b = !bwat wordt geparseerd als:

b = (!b)

Het zijn dus twee operators.

  1. Keer eerst bom.
  2. Wijs het vervolgens weer toe aan b.

De toewijzingsoperator retourneert de toegewezen waarde. Daarom evalueert (b =! b)naar waar – wat u afdrukt.


Antwoord 2, autoriteit 9%

b != bbetekent ! (b == b): het tegenovergestelde van b == b.

b =! bis eigenlijk b = !b, een opdracht. Het verandert de waarde van b. Een toewijzing evalueert tot de waarde van de uitdrukking, dus dit zal resulteren in !b(samen met het wijzigen van de waarde van b).


Antwoord 3, autoriteit 8%

b=!bis een opdracht. Het wijst btoe aan !ben de uitdrukking evalueert tot de resulterende waarde, die trueis.


Antwoord 4, autoriteit 3%

b =! b

je doet een opdracht, je zegt dat B de waarde !B moet hebben.

b != b

U vraagt ​​of B anders is dan b

Other episodes