La differenza ha a che fare con l'ordine delle operazioni. Il seguente:
str += ((char)97) +2;
è equivalente a:
str = str + (((char)97) + 2);
D'altra parte, la seguente:
str = str +((char)97)+2;
è equivalente a:
str = (str + ((char)97)) + 2;
Nota la differenza nel posizionamento delle parentesi.
Consideriamo ora i due casi:
1) str = str + (((char)97) + 2)
:
Qui, 97 + 2
viene valutata per prima. Il risultato è un int
(99
), che viene convertito in stringa e aggiunto a str
. Il risultato è "Hello99"
.
2) str = (str + ((char)97)) + 2
:
Qui, (char)97
('a'
) è allegato alla stringa, e quindi 2
viene convertito in stringa e allegato al risultato. Questo dà "Helloa2"
.