Warum erfordern Java's +=, -=, *=, /= zusammengesetzte Zuweisungsoperatoren kein Casting?
Bis heute dachte ich, dass zum Beispiel:
i += j;
nur eine Abkürzung für ist:
i = i + j;
Aber wenn wir dies versuchen:
int i = 5;
long j = 8;
Dann wird i = i + j;
nicht kompiliert, aber i += j;
wird gut kompiliert.
Bedeutet das, dass i += j;
in Wirklichkeit eine Abkürzung für etwas wie dieses ist
i = (Typ von i) (i + j)
?
3539
3
Wie immer bei diesen Fragen gibt das JLS die Antwort. In diesem Fall §15.26.2 Zusammengesetzte Zuweisungsoperatoren. Ein Auszug:
Ein Beispiel zitiert aus §15.26.2
Mit anderen Worten: Ihre Annahme ist richtig.
Sehr gute Frage. Die Java Language specification bestätigt Ihren Vorschlag.
Zum Beispiel ist der folgende Code korrekt:
Sie müssen im Fall von "i = i + l" explizit von "long" in "int" umwandeln, damit es kompiliert wird und eine korrekte Ausgabe erfolgt.
oder
aber im Fall von
+=
funktioniert es einfach, weil der Operator implizit die Typumwandlung vom Typ der rechten Variable zum Typ der linken Variable vornimmt, so dass keine explizite Umwandlung erforderlich ist.