Sobes.tech
Middle

De ce valoarea de tip String în Java nu poate fi schimbată?

sobes.tech AI

Răspuns de la AI

Valoarea tipului String în Java este imutabilă (immutable) deoarece:

  • Utilizarea eficientă a pool-ului de șiruri (String Pool): JVM păstrează un pool de șiruri pentru economisirea memoriei. Șirurile imutabile permit mai multor variabile să facă referire la același obiect din pool fără riscul ca o modificare să afecteze celelalte.
  • Siguranța în multithreading: Deoarece obiectele de tip string sunt imutabile, pot fi partajate în siguranță între fire fără sincronizare externă. Acest lucru simplifică programarea multithread.
  • Utilizarea ca chei în colecții: String este adesea folosit ca cheie în colecții precum HashMap și HashSet. Imutabilitatea garantează că codul hash al obiectului rămâne constant pe durata vieții sale, ceea ce este critic pentru funcționarea corectă a acestor structuri de date. Modificarea unui obiect folosit ca cheie ar distruge structura internă.
  • Securitate: Obiectele de tip string sunt folosite pentru a reprezenta date importante, precum nume de fișiere, adrese de rețea și parole. Imutabilitatea previne modificări accidentale sau malițioase ale acestor valori după crearea lor.

Când pare că valoarea string-ului "se schimbă" (de exemplu, la concatenarea stringurilor), în realitate se creează un nou obiect String.

// String inițial în pool
String s1 = "Hello";

// Se creează un nou obiect "Hello World", s1 continuă să indice spre "Hello"
String s2 = s1 + " World";

Pentru operații care necesită modificări frecvente ale stringurilor, se folosesc clase mutabile precum StringBuilder (nesigur pentru fire) sau StringBuffer (sigur pentru fire).