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 != b
is de gebruikelijke !=
(niet gelijk aan) vergelijking.
Aan de andere kant:
b =! b
kan beter worden geschreven als b = !b
wat wordt geparseerd als:
b = (!b)
Het zijn dus twee operators.
- Keer eerst
b
om. - 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 != b
betekent ! (b == b)
: het tegenovergestelde van b == b
.
b =! b
is 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=!b
is een opdracht. Het wijst b
toe aan !b
en de uitdrukking evalueert tot de resulterende waarde, die true
is.
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