Unterschied zwischen a += b und a = a + b
In Java, ich Frage mich wirklich, gibt es einen Unterschied zwischen der Verwendung a += b;
oder a = a + b;
. Was sollte ich verwenden hauptsächlich? Ich weiß, das erste ist sowas wie Verknüpfung, aber funktioniert der compiler diese beiden Indikationen anders?
- Bitte Sprache angeben.
- Welche Sprache? In welchem Kontext? Abhängig von der Sprache, es kann auch abhängen von der Art der
a
undb
. - look up "sytactic Zucker".
- Siehe: stackoverflow.com/questions/8710619/java-operator
- Die a+=b, was sinnvoll ist, präziser Auftrag, aber nicht unbedingt am einfachsten zu verstehen! Das hängt nur von Euch, denke ich.
- Ich habe gerade überprüft die Verbindung. "wow". diese waren wirklich anders. Dank
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sehen die Java language specification, 15.26.2 Zusammengesetzte Zuweisungsoperatoren
Zitieren die einschlägigen Teile:
So ist es mehr als syntaktischer Zucker, wie
kompiliert, wo
gibt Ihnen einen compile-Fehler, wie diskutiert wurde hier auf StackOverflow vor kurzem
abhängig von der Sprache, aber in c# ist es sehr leicht effizienteren Verwendung von a += b;.
a wird nur einmal ausgewertet.
in a = a + b, a ist zweimal beurteilt.
http://msdn.microsoft.com/en-us/library/sa7629ew.aspx
Nur syntaktischen Zucker in den meisten Sprachen, die ich kenne, das wäre auch c, c++, C#, java, javascript..
deutlichen Unterschied gemerkt von Zikade in Bezug auf c++:
+
würde bauen ein temporäres Objekt, während+=
würde nicht. Letzteres ist etwa 30% schneller.In den meisten Sprachen, die Unterstützung dieser notation
a = a + b
ist das gleiche wiea += b
, aber es ist nicht immer der Fall.Hier ist ein Beispiel in Python (mit Numpy):
Hier
a = a + b
erstellt ein neues array füra + b
und speichert es ina
.c
, die war mit die gleiche Referenz wie die erstena
hält immer noch den ersten Arrays (mit Wert 1).Hier
a += b
re-verwendet den ersten arraya
. Als ein Ergebnis, da beidea
undc
auf dasselbe array verweisen, die beidea
undc
geändert werden.Zusätzlich zu allem oben gesagt, Sie können auch die folgenden shortcuts:
- Operator (+=)
gleiche wie:
Operator (-=)
gleiche wie:
- Operator (*=)
gleiche wie:
- Operator (/=)
gleiche wie:
- Operator (%=)
gleiche wie :
- Operator (&=)
gleiche wie :
- Operator (|=)
gleiche wie :
- Operator (^=)
gleiche wie :
- Operator (>>=)
gleiche wie
Die gleiche operation-operator (<<=) und-operator (>>>=) .
In den meisten Fällen endet es damit, die gleiche Sache.
In einigen Sprachen
+=
ist ein separater operator, der überladen werden kann, etwas anderes zu tun.Z.B. in Python mit Listen, das Verhalten ist anders (ich lernte auf die harte Weise)
Ich'ld lieber
a += b
übera = a + b
. Vor allem ist es weniger zu schreiben, zweitens ist es klarer, was Los ist. Und wenn man über C++ - Klassen und es könnte effizienter sein, mit +=. Werfen Sie einen Blick auf dieses Beispiel:Wie Sie sehen können, mit
operator +=
Sie haben weniger temporäre Objekte und bessere Leistung.Es ist compiler- (und damit von der Implementierung) definiert, ob der compiler erzeugt anderen code aus den oben genannten Quellen, aber eins ist sicher: a += b ist, soll ein einfacher short-hand notation a = a + b. (das ist, warum, im Allgemeinen, ein vernünftiger compiler erzeugen würde, den gleichen code für beide).
Nein, der compiler macht keinen Unterschied zwischen den beiden im Ausgang. Der einzige Unterschied ist bei der Analyse und möglicherweise in der lexikalischen Analyse (je nach ausbau). Sie würden in der Regel verwenden Sie das Tastaturkürzel form
+=
. Es ist nur syntaktischer Zucker.