beim ersten wird c direkt um 5 erhöht. beim zweiten wird c und i addierst und erst dann c zugewießen. der unterschied liegt daran, dass beim zweiten die addition einen int ergibt und dieser int nicht in den char passen könnte. d.h. man bräuchte hier einen expliziten cast. beispiel 3 ist das selbe: int ist größer als char und würde bei der zuweißung in einen char evtl. datenverlust bedeuten > expliziter cast erforderlich
hab ich doch grad gesagt. beim ersten wird c direkt um i erhöht. beim zweiten wird es erst addiert, das ergibt einen int und dann wird dieser int dem char zugewießen.
ein int passt nicht in einen char, höchstens per cast mit möglichen Verlust
bei += wird interessanterweise automatisch gecastet, bzw. je nach Interpretation eben 'c direkt um 5 erhöht'
würde das auch für andere zuweisungsoperatoren und andere primitive datentypen gelten, dass der explizite cast immer in solchen fällen wegfällt (und durch einen impliziten ersetzt wird)?
Das hatten wir glaub schon mal an anderer Stelle (war das in der Rätselecke?), dass das eben nicht in allen Fällen genau dasselbe ist.
Das Folgende
Java:
char c ='a';
c +=1;
c = c +1;
meldet auf Zeile 3 einen Fehler. Das sind eben die ziemlich sinnbefreiten Effekte die entweder nirgendwo beschrieben sind oder deren Beschreibung so gut versteckt ist, dass man sie nicht findet.
(Würde mich ja sehr wundern wenn das so geplant gewesen wäre :bahnhof: )
Was in diesem Fall keinen großen Unterschied machen würde. Dass es sinnfrei ist, da stimme ich dir zu. Ob es ungewollt ist, das weiß ich nicht. Weiß jemand, wo etwas dazu in der JLS Erwähnung findet oder welche Regel man sich merken könnte?
@SlaterB: Was ist daran so schwer zu verstehen, ob es in gleicher Weise auch für andere primitive Datentypen und Operatoren gilt. Verstehst du das Wort "andere" nicht? Dann kauf' dir mal 'ne Tüte deutsch.
pff als Gast hätte ich mich das auch getraut
Der Unterschied sieht so aus:
Java:
int i =5char c =0;
c = c + i;
Der Operator "+" für die Typen "char" und "int" gibt ein "int" zurück, das hier ist dasselbe:
Java:
int i =5char c =0;int cPlus = c + i
c = cPlus;// geht nicht, int passt nicht in char!
Denn char hat 16 bits (2 bytes), int 32 bits (4 bytes).
So hab ich das verstanden
Java:
int i =5char c =0;
c += i;
Das ist eine eigenart von Java, warum es hier einfach so geht, kann ich dir nicht sagen. Da wird wohl ein Programmierer einen automatischen Cast von X auf char eingebaut haben.
A compound assignment expression of the form E1 op= E2 is equivalent to E1 = (T)((E1) op (E2)), where T is the type of E1, except that E1 is evaluated only once