1. Ausdrücke vs. Aussagen

In Java ist es hilfreich, zwischen zwei Kategorien zu unterscheiden: Anweisungen und Ausdrücke . Eine Anweisung wird normalerweise ausgeführt , während ein Ausdruck ausgewertet wird . Aber das ist nicht das Wichtigste.

Der Hauptunterschied zwischen einer Anweisung und einem Ausdruck besteht darin, dass die Auswertung eines Ausdrucks ein Ergebnis hat . Und dieses Ergebnis hat einen Typ und kann einer Variablen zugewiesen oder in einem anderen Ausdruck verwendet werden.

Beispiele:

Code Anmerkungen
int x; Stellungnahme
(a < 10) Ausdruck, dessen Typ istboolean
i++; iAusdruck, dessen Typ mit dem Typ der Variablen übereinstimmt
x = 5; xAusdruck, dessen Typ mit dem Typ der Variablen übereinstimmt

Und was bringt uns das?

Erstens können wir uns die Tatsache zunutze machen, dass viele Anweisungen tatsächlich Ausdrücke sind (das heißt, sie ergeben einen Wert). Code wie dieser funktioniert beispielsweise:

Code Anmerkungen
int x, y, z;
x = y = z = 1;
int x, y, z;
x = (y = (z = 1))

Zweitens können wir, wenn wir möchten, das Ergebnis der Auswertung eines Ausdrucks ignorieren.

Code Code, bei dem wir das Ergebnis ignorieren:
int x = scanner.nextInt();
boolean m = (5 < 10);
scanner.nextInt();
(5 < 10);

Wir ignorieren das Ergebnis der Auswertung eines Ausdrucks, wenn der Ausdruck beispielsweise eine sinnvolle Aktion beinhaltet und diese Aktion für uns wichtig ist, nicht das Ergebnis selbst.


2. Ternärer Operator

Dieser Life-Hack ist bereits interessanter als der vorherige. Java verfügt über einen speziellen ternären Operator . Seine Syntax ähnelt in gewisser Weise der Syntax der if-elseAnweisung:

Condition ? Expression 1 : Expression 2;

Wenn die Bedingung wahr ist, wird Ausdruck 1 ausgewertet, andernfalls wird Ausdruck 2 ausgewertet. Auf die Bedingung folgt ein Fragezeichen und die beiden Ausdrücke werden durch einen Doppelpunkt getrennt .

Der Hauptunterschied zwischen dem ternären Operator und einer if-elseAnweisung besteht darin, dass der ternäre Operator ein Ausdruck ist, was bedeutet, dass wir sein Ergebnis etwas zuweisen können.

Angenommen, wir möchten das Minimum zweier Zahlen berechnen. Mit dem ternären Operator würde dieser Code so aussehen:

int a = 2;
int b = 3;
int min = a < b ?  a : b;

Oder nehmen wir an, Sie müssen einer Variablen abhängig von einer Bedingung unterschiedliche Werte zuweisen. Wie machst du das?

if-elseEine Möglichkeit besteht darin, eine Anweisung zu verwenden :

int age = 25;
int money;
if (age > 30)
   money = 100;
else
   money = 50;

Die zweite Möglichkeit besteht darin, den ternären Operator zu verwenden , also die Abkürzung für die if-elseAnweisung:

int age = 25;
int money = age > 30 ? 100 : 50;

Was ist also besser zu verwenden – eine if-elseAnweisung oder der ternäre Operator ? Bezüglich der Ausführungsgeschwindigkeit gibt es keinen großen Unterschied. Dies ist eher eine Frage der Lesbarkeit des Codes. Und das ist ein ganz wichtiger Punkt: Der Code muss nicht nur korrekt funktionieren, sondern auch für andere Programmierer leicht lesbar sein.

Die einfachste Regel lautet: Wenn der Code in eine Zeile passt , verwenden Sie den ternären Operator . aber wenn es nicht in eine Zeile passt, ist es besser, eine if-elseAnweisung zu verwenden.



3. Vergleich reeller Zahlen

Wie bereits erwähnt, können Sie nicht einfach echte Zahlen nehmen und diese vergleichen. Es besteht immer die Möglichkeit, dass einige wichtige Ziffern verworfen werden, was zu unerwarteten Nebenwirkungen führen kann.

Deshalb gibt es einen bewährten Ansatz. Wenn sich zwei reelle Zahlen um einen sehr kleinen Wert unterscheiden, können sie als gleich betrachtet werden. Beispiel:

double a = 1.000001;
double b = 1.000002;
if ( (b - a) < 0.0001 )
   System.out.println("The numbers are equal");
else
   System.out.println("The numbers are not equal");

Aber das ist noch nicht alles, worüber wir uns Sorgen machen müssen, denn die Differenz zwischen den Zahlen kann durchaus negativ ausfallen. Damit dieser Ansatz funktioniert, müssen Sie nicht nur die Differenz zwischen den Zahlen vergleichen, sondern auch den absoluten Wert der Differenz zwischen den Zahlen:|a-b|

Java verfügt über eine Methode zur Berechnung des Absolutwerts einer Zahl Math.abs():

int m = Math.abs(value);

Infolgedessen wird die korrigierte Version unseres obigen Beispiels so aussehen:

double a = 1.000001;
double b = 1.000002;

if ( Math.abs(b - a) < 0.0001 )
   System.out.println("The numbers are equal");
else
   System.out.println("The numbers are not equal");