Java booleschen operator"|="
Kürzlich sah ich einen code mit diesem:
boolean val = something();
val |= somethingElse();
Interessante Teil ist, | = (binären wie) - operator auf primitiven Typ boolean.
Wundert es mich, dass |= existiert für boolean, als wenn es integer-Typ, und suchte Java-Spezifikation für diesen operator, konnte aber keine finden.
Ich würde gespannt sein, ob die Rechte operand wird ausgewertet, wenn der linke Wert bereits true ist.
Kann mir jemand zeigen, um Java-Spezifikation dieses?
- Es ist lediglich val = val | ähnliches(); // ähnliches() erwartet als return boolean. Es ist ein standard ODER
- OP weiß, fragt er nach Angabe in einem Dokument.
- Antwort ist hier dudes: stackoverflow.com/q/2486472/544983
- Ich dachte, es ist nur || für Boolesche Ausdrücke, so würde ich erwarten, dass Betreiber wie die ||= . Macht es Sinn machen Binär - | ein boolean?
- Keine Verknüpfung, Auswertung, obwohl nicht ausdrücklich erwähnt. Nur in || den shortcut Logik ist ausdrücklich erwähnt.
- es ist nicht ein standard-ODER, es ist eine bitweise ODER-operator (im Gegensatz zu einer booleschen operator). Es ist auch eine aggressive operator, im Gegensatz zu einem Kurzschluss-operator (der wie der Boolesche operator).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aus der JLS:
Dies bedeutet, dass
ist streng äquivalent zu
(vorausgesetzt
somethingElse()
zurückboolean
oderBoolean
).Ja, würde es bewertet werden, da
|
nicht Kurzschluß:Sehen http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.22.2 für die definition von
|
. Sehen http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.26.2 für die Definition des|=
. Die Definitionen sind genau das, was Sie denken würde.Was mich wundert, ist das fehlen einer
||=
Betreiber.Bitweise Operatoren (wie
|
,&
, ..) bewerten beide Seiten, vor der Fertigstellung.Logische Operatoren (wie
&&
,||
, ..) können überspringen Sie die Auswertung des zweiten Teils, in einigen Fällen. Dies wird alsshort-circuit
.Bitweiser Logik-Operatoren haben die gleiche Wirkung der "normalen" Logik-Operatoren auf Boolean.
Vom Java Language Specification 15.22:
Der einzige wirkliche Unterschied ist, dass die bitweisen Operatoren kann nicht verwendet werden, um short-circuit-evaluation.
Zum Beispiel wird mit diesem code werfen
NullPointerException
:Es ist nicht Binär, es ist eine "ODER" Logik-Anweisung bedeutet, dass
ist der gleiche wie der Boolesche Ausdruck:
ist inclusive oder ( regulären oder in der Mathematik Ausdrücke und informatik)
In einigen Programmiersprachen oder ist bereits von beiden | | - Zeichen und in einigen von einem | einer von Ihnen ist SQL und Datenbanken aller Sprachen, die ich kenne DTD JSON etc..