La diferencia tiene que ver con el orden de las operaciones. Los siguientes:
str += ((char)97) +2;
es equivalente a:
str = str + (((char)97) + 2);
Por otra parte, lo siguiente:
str = str +((char)97)+2;
es equivalente a:
str = (str + ((char)97)) + 2;
Nota la diferencia en la colocación de paréntesis
Ahora vamos a considerar los dos casos:
1) str = str + (((char)97) + 2)
:
Aquí, 97 + 2
se evalúa primero. El resultado es int
(99
), que se convierte en cadena y se agrega al str
. El resultado es "Hello99"
.
2) str = (str + ((char)97)) + 2
:
Aquí, (char)97
('a'
) se adjunta a la cadena, y luego 2
se convierte en cadena y se añade al resultado. Esto da "Helloa2"
.