Ich habe immer gedacht, dass der &&
Operator in Java verwendet wird, um zu überprüfen, ob beide booleschen Operanden vorhanden sind true
, und der &
Operator wird verwendet, um bitweise Operationen für zwei Ganzzahltypen auszuführen.
Kürzlich habe ich erfahren, dass der &
Operator auch verwendet werden kann, um zu überprüfen, ob beide booleschen Operanden vorhanden sind true
. Der einzige Unterschied besteht darin, dass der RHS-Operand überprüft wird, auch wenn der LHS-Operand falsch ist.
Ist der &
Operator in Java intern überlastet? Oder steckt dahinter ein anderes Konzept?
java
operators
boolean
bitwise-operators
Gemeinschaft
quelle
quelle
Antworten:
& <- überprüft beide Operanden
&& <- stoppt die Auswertung, wenn der erste Operand als falsch ausgewertet wird, da das Ergebnis falsch ist
(x != 0) & (1/x > 1)
<- dies bedeutet bewerten,(x != 0)
dann bewerten und(1/x > 1)
dann das & ausführen. Das Problem ist, dass für x = 0 eine Ausnahme ausgelöst wird.(x != 0) && (1/x > 1)
<- dies bedeutet auswerten(x != 0)
und nur wenn dies wahr ist, dann auswerten.(1/x > 1)
Wenn Sie also x = 0 haben, ist dies absolut sicher und wird keine Ausnahme auslösen, wenn (x! = 0) als falsch ausgewertet wird, wird das Ganze direkt als falsch ausgewertet ohne die zu bewerten(1/x > 1)
.BEARBEITEN:
exprA | exprB
<- das heißt bewertenexprA
dann bewerten undexprB
dann das tun|
.exprA || exprB
<- dies bedeutet bewertenexprA
und nur wenn diesfalse
dann ausgewertet wirdexprB
und das tun||
.quelle
Abgesehen davon, dass ich kein fauler Bewerter bin, indem ich beide Operanden auswerte, denke ich, dass die Hauptmerkmale von bitweisen Operatoren jedes Byte von Operanden wie im folgenden Beispiel vergleichen:
quelle
quelle
Das hängt von der Art der Argumente ab ...
Bei ganzzahligen Argumenten ist das einzelne kaufmännische Und ("&") der "bitweise AND" -Operator. Das doppelte kaufmännische Und ("&&") ist nur für zwei boolesche Argumente definiert.
Bei booleschen Argumenten bildet das einfache kaufmännische Und den (bedingungslosen) Operator "logisches UND", während das doppelte kaufmännische Und ("&&") den Operator "bedingtes logisches UND" darstellt. Das heißt, dass das einfache kaufmännische Und immer beide Argumente auswertet, während das doppelte kaufmännische Und das zweite Argument nur auswertet, wenn das erste Argument wahr ist.
Bei allen anderen Argumenttypen und -kombinationen sollte ein Fehler bei der Kompilierung auftreten.
quelle
&& ist ein Kurzschlussoperator, während & ein UND-Operator ist.
Versuche dies.
quelle
Es ist wie im JLS (15.22.2) angegeben :
Der "Trick" ist das
&
es sich sowohl um einen ganzzahligen bitweisen Operator als auch um einen booleschen logischen Operator handelt . Warum also nicht, dies als Beispiel für eine Überlastung des Bedieners zu betrachten, ist vernünftig.quelle
Ich denke, meine Antwort kann verständlicher sein:
Es gibt zwei Unterschiede zwischen
&
und&&
.Wenn sie als logisches UND verwenden
&
und&&
kann logisch seinAND
, wenn das&
oder&&
links und rechts Ausdruck zur Folge hat alles wahr ist, die ganze Operation Ergebnis kann wahr sein.wann
&
und&&
wie logischAND
gibt es einen Unterschied:bei Verwendung
&&
als logischAND
wird der rechte Ausdruck nicht ausgeführt, wenn das Ergebnis des linken Ausdrucks falsch ist.Nehmen Sie das Beispiel:
Bei Verwendung von
&
:Ein weiteres Beispiel:
& kann als Bitoperator verwendet werden
&
kann als bitweiserAND
Operator verwendet werden,&&
kann nicht.Von der Wiki-Seite:
http://www.roseindia.net/java/master-java/java-bitwise-and.shtml
quelle
'&&': - ist ein logischer AND-Operator, der basierend auf der logischen Beziehung seiner Argumente einen booleschen Wert von true oder false erzeugt.
Zum Beispiel: - Bedingung1 && Bedingung2
Wenn Bedingung1 falsch ist, ist (Bedingung1 && Bedingung2) immer falsch. Dies ist der Grund, warum dieser logische Operator auch als Kurzschlussoperator bezeichnet wird, da er keine andere Bedingung auswertet. Wenn Bedingung1 falsch ist, muss Condtiton2 nicht bewertet werden.
Wenn Bedingung1 wahr ist, wird Bedingung2 ausgewertet. Wenn sie wahr ist, ist das Gesamtergebnis wahr, andernfalls ist es falsch.
'&': - ist ein bitweiser UND-Operator. Es erzeugt eine Eins (1) im Ausgang, wenn beide Eingangsbits eins sind. Andernfalls wird Null (0) erzeugt.
Beispielsweise:-
int a = 12; // binäre Darstellung von 12 ist 1100
int b = 6; // binäre Darstellung von 6 ist 0110
int c = (a & b); // Die binäre Darstellung von (12 & 6) ist 0100
Der Wert von c ist 4.
Referenz finden Sie unter http://techno-terminal.blogspot.in/2015/11/difference-between-operator-and-operator.html
quelle
&&
und||
werden Kurzschlussoperatoren genannt. Wenn sie verwendet werden, für||
- wenn der erste Operand ausgewertet wirdtrue
, werden die restlichen Operanden nicht ausgewertet. Für&&
- wenn der erste Operand zu ausgewertet wirdfalse
, werden die übrigen überhaupt nicht ausgewertet.so
if (a || (++x > 0))
in diesem Beispiel die Variable x nicht erhöht bekommen , wenn eine isttrue
.quelle
Bei Booleschen Werten gibt es keinen Ausgabedifferenz zwischen beiden. Sie können && und & oder || tauschen und | und es wird niemals das Ergebnis Ihres Ausdrucks ändern.
Der Unterschied liegt hinter der Szene, in der die Informationen verarbeitet werden. Wenn Sie einen Ausdruck "(a! = 0) & (b! = 0)" für a = 0 und b = 1 korrigieren, geschieht Folgendes:
Wenn Sie einen Ausdruck schreiben,
(a != 0) && ( b != 0)
wenn a = 0 und b = 1, geschieht Folgendes:Weniger Schritte, weniger Verarbeitung, bessere Codierung, insbesondere bei vielen booleschen Ausdrücken oder komplizierten Argumenten.
quelle
Neben && und || Berücksichtigen Sie beim Kurzschließen auch den Vorrang des Bedieners, wenn Sie die beiden Formen mischen. Ich denke, es wird nicht jedem sofort klar sein, dass result1 und result2 unterschiedliche Werte enthalten.
quelle
& ist ein bitweiser Operator plus, der zum Überprüfen beider Bedingungen verwendet wird, da manchmal beide Bedingungen ausgewertet werden müssen. Der logische Operator && wechselt jedoch zur zweiten Bedingung, wenn die erste Bedingung true ergibt.
quelle
Alle Antworten sind
great
, und es scheint, dassno
mehr Antworten,is needed
aber ich wollte nur etwas über den&&
angerufenen Operator hervorhebendependent condition
In Ausdrücken, die den Operator && verwenden, kann eine Bedingung - wir nennen dies die
dependent condition
- erfordern, dass eine andere Bedingung wahr ist, damit die Bewertung der abhängigen Bedingung sinnvoll ist.In diesem Fall sollte die abhängige Bedingung nach dem Operator && gesetzt werden, um Fehler zu vermeiden.
Betrachten Sie den Ausdruck
(i != 0) && (10 / i == 2)
. Die abhängige Bedingung(10 / i == 2)
mussappear after
der&&
Bediener haben, um die Möglichkeit der Division durch Null zu verhindern.ein anderes Beispiel
(myObject != null) && (myObject.getValue() == somevaluse)
und eine andere Sache:
&&
und||
werden Kurzschlussauswertung genannt, weil das zweite Argument ausgeführt oder ausgewertet wird,only if
das dasfirst
Argumentnot suffice
mitdetermine
demvalue
von tutexpression
Referenzen: Java ™ Programmieranleitung (frühe Objekte), 10. Ausgabe
quelle