2016-05-08 8 views
3

Wenn eine if-Anweisung zwei (oder mehr) Bedingungen enthält und die erste fehlschlägt, überprüft die if-Anweisung die zweite Bedingung oder setzt sie im Code fort?Wann beendet eine if-Anweisung ihre Bedingungen?

Hier sind zwei Beispiele:

int x = 1, y = 2; 
if(x == 0 && y == 2) 
    System.out.println("Nothing"); 
if(x == 1 || y == 0) 
    System.out.println("Something"); 

In der ersten if-Anweisung sollten die Bedingungen false zurück, wird aber y == 2 selbst getestet? Und im zweiten Beispiel sollten die Bedingungen wahr, aber y == 0 überhaupt getestet werden? Oder in beiden Fällen überspringt der Code nach der ersten Bedingung die zweite Bedingung und fährt mit dem Code fort?

Vielen Dank im Voraus.

+4

Erfahren Sie mehr über Kurzschließer. – SLaks

Antwort

4

&& und || sind Kurzschluss Betreiber, was bedeutet, die rechte Seite Vergleich nicht ausgewertet werden, wenn es nicht notwendig ist.

So haben wir folgendes:

  • Wenn && verwenden, wenn die linke Seite Vergleich false ist, die rechte Seite Vergleich wird nicht ausgewertet.

  • Bei Verwendung von ||, wenn der Vergleich auf der linken Seite true ist, wird der Vergleich auf der rechten Seite nicht ausgewertet.


Wenn jedoch & und | als logische Operatoren verwenden, werden immer beide Seiten ausgewertet werden.

0

Genau wie @Cassio angegeben, wird der zweite Operand nicht ausgewertet.

Die Kurzschlussauswertung ist sehr praktisch, wenn Sie beispielsweise nach einem Objekt suchen und seine Eigenschaften überprüfen müssen.

if (X !=null && X.length !=null) ... 
0

In && Operator sowohl Vergleich muss true zurückkehren den if Zustand übergeben, damit, wenn der erste ist false das Ergebnis sein wird false was auch immer das zweite Ergebnis ist.

In || Operator, wenn eine des Vergleichs true ist, wird das Ergebnis if sein true was auch immer das zweite Ergebnis ist.

So

In dem AND-Operator wird es den zweiten Vergleich testen, ob die ersten true ist und es braucht den zweiten Vergleich zu testen, um den Zustand Ergebnis zu bestimmen.

Im OR-Operator wird der zweite Vergleich getestet, wenn der erste false ist und er den zweiten Vergleich durchführen muss, weil er das Ergebnis der Bedingung ändern kann, wenn es true ist.