[ glamoc @ 05.07.2011. 19:56 ] @
Ovo pitanje se odnosi skoro na sve objektno orjenisane jezike(Java,C#,Objective C).
Nije mi to jasno zasto su stringovi nepromenljivi objekti.
Mislim da to dosta ubrzava operacije sa stringovima, ali da zakrcuje memoriju.
Ima li neki posebno bitan razlog za ovo?
[ Au197/79 @ 05.07.2011. 20:40 ] @
1) zbog optimizacije brzine i memorije, jer ako se zna da je "aaaa" uvek te vrednosti JVM će svaku pojavu tog literala vezati za isti objekat, neće se praviti novi osim ako se baše ne iskoristi new String("aaaa"). Isprobaj ovo, napravi više stringova pa ih poredi sa == dobićeš true osim ako ne koristiš operator new.
2) zbog enkapsulacije, kad getter metoda vrati referencu tipa String, preko te reference se ne može menjati unutrašnje stanje objekta, mora se pozvati setter.

Sigurno ima još razloga...
[ Dejan Lozanovic @ 06.07.2011. 09:57 ] @
Citat:
glamoc:
Mislim da to dosta ubrzava operacije sa stringovima, ali da zakrcuje memoriju.


Pa sad ovo je opet diskutabilno, jer npr substring nekog stringa koristi isti niz karaktera. pa tako zapravo imas i ustedu. A druga lepa stvar kod tih objekata koji ne mogu da menjaju svoj sadrzaj jeste da su Thread safe :) znaci nema potrebe za synchronize npr :)
[ biske86 @ 06.07.2011. 11:17 ] @
Možda ova tema na stackoverflow.com pomogne:
http://stackoverflow.com/quest...ngs-be-mutable-in-java-and-net