Moin Kameraden,
Am Beispiel OR: Einmal "|" und "||".
Bei "|" werden die beiden verknüpften Ausdrücke in jedem Fall ausgewertet, bei "||" wird der zweite Ausdruck nicht mehr ausgewertet, wenn er nicht relvant ist.
Das ist in C auch so. Aber nur deshalb, weil zwischen '|' und '||' ein Unterschied in der Bedeutung existiert:
'||', '&&': Logisches (boolsches) oder/und
'|', '&': Bitweises (arithmetisches) oder/und
Bei den Doppel-Symbolen werden die Operanden nur daraufhin ausgewertet, ob sie ungleich Null sind. Das Ergebnis ist die Boolsche Verknüpfung des Operanden; hier wird der zweite Operand tatsächlich nicht ausgewertet, wenn das Ergebnis schon durch den ersten feststeht.
Bei den Einzel-Symbolen werden die Operanden dagegen als Integerwerte betrachtet und Bit für Bit verknüpft. So ergibt dann z.B.
157 & 82 = 80
denn 157 = 1 0 0 1 1 1 0 1
82 = 0 1 0 1 0 0 1 0
------------------------
AND: 80 = 0 1 0 1 0 0 0 0
Bei dieser bitweisen Verknüpfung werden auf jeden Fall beide Operanden ausgewertet, weil das Ergebnis in aller Regel auch von beiden abhängt.
Meine Vermutung ist, dass Java auch den Unterschied zwischen bitweiser und logischer Verknüpfung macht, und die "shortcut evaluation" nur deshalb bei '&&' und '||' nicht verwendet wird.
So long,
Martin
Husten kann böse Folgen haben.
Besonders im Kleiderschrank.