Unäre Operatoren in Java

OTUS startet morgen ein neues professionelles Zertifizierungsvorbereitungsprogramm für Oracle Java Programmer (OCAJP) . Wir laden Sie ein, sich die Aufzeichnung der kostenlosen Demo-Lektion "Java-Datentypen: Bezeichner und Grundelemente" anzusehen und veröffentlichen weiterhin eine Reihe von Artikeln von Vladislav Rodin, Leiter der Entwicklungsgruppe, Lehrer bei MIPT und foxminded.





Einführung



Die OCA-Zertifizierung (Oracle Certified Associate Java SE8 Programmer) bietet eine Reihe von eigenartigen Aufgaben, die ein tiefes Verständnis der Java-Programmiersprache testen. Der gesamte Block ist Ausdrücken, Schleifen und Operatoren gewidmet. Wir werden heute über Letzteres sprechen.



Bedienerpriorität



Der Operator akzeptiert Argumente als Eingabe und gibt einige Werte zurück. Es gibt unäre, binäre und ternäre Operatoren. Zum Beispiel ! False ist unär, a + b ist binär und? : - ist der einzige Operator, der drei Argumente akzeptiert.



Das erste, woran Sie sich erinnern sollten, ist der Vorrang der Operatoren:



  1. Post-unäre Operatoren: Ausnahme ++ und Ausnahme--
  2. Vorunäre Operatoren: ++ Ausnahme und - Ausnahme
  3. Der Rest der unären Operatoren: +, -,!
  4. Multiplikation, Division, Rest: *, /,%
  5. Addition und Subtraktion: +, -
  6. Bitverschiebungsoperatoren: <<, >>, >>>
  7. Vergleichsoperatoren: <,>, <=,> =, instanceof
  8. Gleichheits-Ungleichheitsoperatoren: ==,! =
  9. Logische Operatoren: &, |, ^
  10. Logische Kurzschlussoperatoren: &&, ||
  11. Ternärer Operator: Boolescher Ausdruck? Ausdruck1:

    Ausdruck2
  12. Zuweisungsoperatoren: =, + =, - =, * =, / =,% =, & =, ^ =,! =, << =, >> =, >>> =


Arbeiten mit unären Operatoren



Wir haben letztes Mal über binäre Operatoren gesprochen. Heute werden wir unäre Operatoren diskutieren, was sich aus dem Titel des Artikels ergibt. Bei der Prüfung bieten sie möglicherweise recht komplexe Ausdrücke, für deren Berechnung Sie sich die Reihenfolge ihrer Ausführung merken müssen.



Vorzeichenwechsel- und logische Inversionsoperatoren



Logischer inverser Operator ! gilt nur für Variablen vom Typ boolean und wandelt den Wert von true in false und umgekehrt um. Zum Beispiel:



boolean x = false;
System.out.println(x); // false
x = !x;
System.out.println(x); // true


Vorzeichenwechseloperator - Gilt nur für Zahlen und Umkehrzeichen:



double x = 1.21;
System.out.println(x); // 1.21
x = -x;
System.out.println(x); // -1.21
x = -x;
System.out.println(x); // 1.21


Java trennt im Gegensatz zu demselben C klar zwischen ganzzahligen Datentypen und Booleschen Werten. Daher führt die Verwendung des Vorzeichenänderungsoperators zu Booleschen Werten oder die Verwendung des logischen Inversionsoperators zu Kompilierungsfehlern:



int x = !5; // DOES NOT COMPILE
boolean y = -true; // DOES NOT COMPILE
boolean z = !0; // DOES NOT COMPILE


Inkrementierungs- und Dekrementierungsoperatoren



Die Operatoren inkrement ++ und dekrementieren werden auf ganzzahlige Variablen angewendet und weisen zwei Variationen auf: Nachinkrementierung (Dekrementierung) und Vorinkrementierung (Dekrementierung) im Code i ++ (i--) bzw. ++ i (--i) . Der Unterschied zwischen den Variationen besteht darin, dass ++ i die Variable inkrementiert und den neuen Wert zurückgibt, während i ++ den alten Wert zurückgibt und erst dann die Variable inkrementiert. Der Unterschied ist in diesem Code deutlicher zu erkennen:



int counter = 0;
System.out.println(counter); // Outputs 0
System.out.println(++counter); // Outputs 1
System.out.println(counter); // Outputs 1
System.out.println(counter--); // Outputs 1
System.out.println(counter); // Outputs 0


Bei der Prüfung können verschiedene knifflige Aufgaben angeboten werden, bei denen es sich bei diesen Bedienern um einen Wagen und einen kleinen Wagen handelt. Beispielsweise kann eine solche Aufgabe angeboten werden.



Was wird als Ergebnis dieses Programms angezeigt?

int x = 3;
int y = ++x * 5 / x-- + --x;
System.out.println("x is " + x);
System.out.println("y is " + y);


Das Problem ist, dass sich x in derselben Zeile mehrmals ändert.



Um solche Probleme zu lösen, können Sie den Ausdruck von links nach rechts analysieren, in den Ausdruck einfügen, was die Operatoren zurückgeben, und den Wert der zu ändernden Variablen separat festlegen. Zum Beispiel so:



int y = 4 * 5 / x-- + --x; // x assigned value of 4
int y = 4 * 5 / 4 + --x; // x assigned value of 3
int y = 4 * 5 / 4 + 2; // x assigned value of 2


Wie Sie sehen können, gelten alle oben genannten Regeln für die Anwendung von Operatoren. Das Ergebnis ist folgendes:



x is 2
y is 7


Weiterlesen








All Articles