Was ist in Java der Unterschied zwischen den Vernküpfungsoperatoren "&&" und "&"?

2 Antworten

Hi!

Interessante Frage! Ohne was von Java zu verstehen hab ich mal versucht mich darüber zu informieren, mir bekannte Sprachen haben solche Operatoren nicht (...oder ich hab sie noch nicht entdeckt) - ich war neugierig :-)

Und: ich bin mir wirklich nicht sicher ob ich das richtig aufgefasst hab, aber so hab ich das verstanden... ich bitte um Korrektur wenn ichs verpeilt hab ;-)

 

Die beiden Operatoren dienen unterschiedlichen Anwendungsfällen, was vielleicht auch ihre Bezeichnung verrät:

& ist ein UND dass sich bitweise auf Integer anwenden lässt
&& ist ein logisches UND und findet bei Boolschen Ausdrücken Verwendung

...besser? Nein? Hat mir auch nicht geholfen. Also hab ich weitergesucht und das da gefunden:

& ist ein UND ohne "Short Circuit Evaluation"
&& ist ein UND mit "Short Circuit Evaluation"

"Short Circuit Evaluation" - der Name lässt sich mit "Kurzschlussausführung" übersetzen. Hat mir erstmal auch nichts gesagt - also, was das denn wieder?

 

Die englische Wikipedia hat da nen erklärenden Artikel - und auch Beispielcode, den ich dann - so glaube ich - verstanden habe:

http://en.wikipedia.org/wiki/Short-circuit_evaluation#Avoiding_the_execution_of_second_expression.27s_side_effects

Das Code-Snippet (...hier C, aber das tut mal nichts zur Sache):

int a = 0;
if (a != 0 && myfunc(b))
{
    do_something();
}

Da lichtete sich dann der Nebel.

Üblicherweise werden solche Vergleiche ja von rechts nach links der Reihe nach abgearbeitet. Nochmal eben schnell ein Beispiel:

if (a AND b AND c) ...etc...

Da wird zunächst a geprüft, was auch immer das ist - dann eben b und zuletzt c.

Die erwähnte "Short Circuit Evaluation" ist eine Möglichkeit um solche Vergleiche abzukürzen. Denn wenn beispielsweise a schon falsch ist - dann spielt es keine Rolle mehr was bei b oder c eigentlich rauskommt. Dieses if wird niemals erfüllt, da a ja bereits falsch ist und ich ja ausdrücklich nur den Fall verlange bei dem alle drei gleichzeitig wahr sind.

Ohne diese Operatoren, also bei ner herkömmlichen Bedingung, werden aber dennoch alle drei geprüft - auch wenn a schon falsch ist wird noch mit b und c weitergemacht.

Und genau das kann man mit dem entsprechenden Operator verhindern.

Schau dir jetzt nochmal das Code-Snippet von Wikipedia an: Da wird myfunc(b) niemals ausgeführt, da a ja zuvor auf den Wert 0 gesetzt wurde - und eben mit dem Operator && gearbeitet wurde.

Hätte man hier den Operator & verwendet, dann wäre die if-Bedingung zwar auch nicht erfüllt - aber myfunc(b) würde abgearbeitet werden. Und das kann manchmal eben zu ungewollten Ergebnissen führen - oder einfach nur zu Laufzeitfehlern.

 

Garkeine schlechte Idee, diese verschiedenen Operatoren. Ist doch ne schöne Möglichkeit um solche Vergleiche gezielt steuern zu können - und man kann sich Ausführungszeit sparen.

Reicht jetzt nicht ganz dass ich mich doch für Java interessieren würde, aber das'n schönes Feature :-)

Ich hoff das ist einigermaßen verständlich?

Grüße!

Nachtrag

(...oder ich hab sie noch nicht entdeckt)

Again what learned: ...Python kann das - und warscheinlich viele weitere Sprachen auch. Man benutzt da nur nicht die Zeichen & bzw. && - in Python wird das eben mit & und dem Wort and geregelt.

Aus der Kategorie: Dinge, die man anwendet, ohne sich darüber jemals Gedanken gemacht zu haben.

Doch, ist ne gute Frage! Gefällt mir!

0

Word-Liste, wie kann ich diese komplett sehen?

Habe Windows 7 und nutze Google Chrome.

Problem: Weiß nicht mehr, wie ich die komplette Liste sehen kann. Sehe immer nur die letzten Themen, auf die ich zugegriffen habe.

Vor einiger Zeit hatte ich mir notiert, wie ich die komplette Liste (Word ist wohl gleich Libre Office)durchsehen kann, wenn ich ein bestimmtes Thema suche. Aber diese Notizen sind mir abhanden gekommen.

Denke, hier kann mir jemand helfen, bitte jedoch darum, es mir in kleinen Schritten und klar zu erklären. Danke schon mal.

...zur Frage

Java schließt sich beim öffnen gleich wieder. Was kann ich da machen?

Hab mir vor ein paar Tagen einen neuen Pc gekauft und mir Java runtergeladen. Jetzt will ich eine Java Datei ausführen, aber es öffnet sich nur ganz kurz ein Fenster und nach 1er Sekunde schließt es sich wieder. Auch wenn ich Java.exe ausführen will passiert das gleiche. Kann mir jemand sage was das für ein Problem ist und wie ich es beheben kann? Danke im Vorraus:)

...zur Frage

cmd Pfadangabe

https://lh6.googleusercontent.com/-tbPxWTGjp3U/UEeH6b8R5rI/AAAAAAAABZk/jaXs5Qbnwi4/s677/cmd.jpg So steht es ja immer am Anfang da. Jetzt will ich den Pfad angeben: C:\Java\Programme\JavaUebung01. das ist der pfad. nach meinem java-buch muss ich jetzt cd angeben, damit sich der Ordner öffne, aber wie muss ich das an das was da immer steht anhängen (also: C:\Users\meinName>). denn wenn man enter klickt wieder4holt sich diese zeile ja immer, also was GENAU muss ich jetzt angeben? ich will meinen Quellcode in einen Bytecode"übersetzen"

...zur Frage

Win 7, was ist eigentlich der Unterschied zwischen Computer neu Starten und Herunterfahren?

Wann ist es unbedingt nötig den Computer herunterzufahren? Es wäre nett wenn mir das jemand kurz erklären könnte.

...zur Frage

Unterschied zwischen TFT und LCD?

Hallöchen, meine Freundin hat mich heute gefragt, wo da der genaue Unterschied ist. Ich konnte es ihr leider nicht genau erklären. Hat jemand eine idiotensichere Definition, die auch ein Laie versteht?

...zur Frage

Was ist der Unterschied zwischen Java und Javascript?

Ich möchte gerne eine Programmiersprache lernen. Ich habe dabei an Java gedacht. Nun habe ich aber gelesen, dass es auch noch die Sprache Javascript gibt. Kann mir jemand erklären was die Unterschiede dieser Sprachen sind und wofür die verwendet werden?

...zur Frage

Was möchtest Du wissen?