Subato

Auswertung von Ausdrücken

jshell> int  bot(){return bot();}
|  modified method bot()

jshell> 17+4*2==25||bot()==42
$12 ==> true

jshell> 17+4*2==42&&bot()==42
$13 ==> false

jshell> 17+4*2==42 ? bot() : 42
$14 ==> 42

jshell> int wenn(boolean cond, int a1, int a2){
   ...>   return cond ? a1 : a2;
   ...> }
|  modified method wenn(boolean,int,int)

jshell> wenn(17+4*2==42, bot(), 42)
|  Exception java.lang.StackOverflowError
|        at bot (#11:1)
|        at bot (#11:1)
|        at bot (#11:1)
|        at bot (#11:1)
|        at bot (#11:1)



Man sieht:

logische Operatoren hören auf zu rechnen, wenn der
erste Operand bereits festlegt, wie das 
Gesamtergebnis lautet. 
false && expr ist immer false.
true || expr ist immer true.

expr wird nicht mehr angeschaut.

Ebenso bei dem Bedingungsoperator. Es wir nur eine 
Alternative ausgewertet.

Bei Funktionsaufrufen werden immer erst alls Argumente
ausgewertet, auch wenn die Funktion diese eventuell
gar nicht braucht, um das Gesamtergebnis zu berechnen.