Warum erfordern zusammengesetzte Zuweisungsoperatoren (+=, -=, *=) in Java keine explizite Typumwandlung?
Hallo zusammen! Ich habe gerade angefangen, Java zu lernen, und bin auf ein für mich unverständliches Verhalten gestoßen. Wenn ich eine normale Zuweisung schreibe, zum Beispiel:\n\nint a = 5;\na = a + 3.5; // Compiler-Fehler: Genauigkeitsverlust\n\nDann beschwert sich der Compiler, dass double nicht ohne explizite Typumwandlung int zugewiesen werden kann. Das ist logisch. Aber wenn ich den zusammengesetzten Operator += verwende:\n\nint a = 5;\na += 3.5; // Funktioniert! Ergebnis 8\n\nHier bin ich verwirrt. Warum verlangt der Compiler im zweiten Fall keine Typumwandlung? Schließlich ist das Ergebnis der Addition von int und double ein double, und wir verlieren es, wenn wir es int zuweisen. Eigentlich sollte es wie im ersten Beispiel sein – ein Fehler.\n\nWarum ist das so? Ist das eine Spracheigenschaft oder übersehe ich etwas? Welche Fallstricke gibt es bei der Verwendung solcher Operatoren? Zum Beispiel, was passiert, wenn ich schreibe:\n\nshort s = 1;\ns += 1; // Funktioniert