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

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 ist zu empfehlen: 44.100 kHz oder 48.000 kHz beim Import nach iTunes?

Ich bin nicht so versiert auf dem Gebiet und würde gerne wissen, mit wieviel Hz ich CD's bei iTunes importieren sollte.

Mehr ist doch meistens auch besser: auch in diesem Fall?

Wo liegt da genau der Unterschied?

Wäre nett, wenn mir das jemand erklären könnte :)

...zur Frage

Was möchtest Du wissen?