Sobes.tech
Middle

Miks Java keeles String-tüüpi väärtust ei saa muuta?

sobes.tech AI

Vastus AI-lt

Java keele String tüüpi väärtus on muutumatu (immutable), sest:

  • Tõhus kasutamine stringide pulga (String Pool): JVM toetab stringide panka mälu kokkuhoiu eesmärgil. Muutumatud stringid võimaldavad mitmel muutujal viidata samale objektile panga sees ilma riskita, et ühe muutuja muutmine mõjutab teisi.
  • Jooksuaegne turvalisus: Kuna stringiobjektid on muutumatud, saab neid turvaliselt jagada erinevate lõimede vahel ilma välise sünkronisatsioonita. See lihtsustab mitmelõimelist programmeerimist.
  • Kasutamine võtmetena kogumites: String kasutatakse sageli võtmena kogumites nagu HashMap ja HashSet. Muutumatud omadused tagavad, et objekti hash-kood jääb konstantseks kogu selle eluea jooksul, mis on kriitiline nende andmestruktuuride õige toimimise jaoks. Objekti muutmine, mida kasutatakse võtmena, rikuks nende sisemise struktuuri.
  • Turvalisus: Stringiobjekte kasutatakse oluliste andmete, nagu failinimed, võrguaadressid ja paroolid, esindamiseks. Muutumatud omadused takistavad nende väärtuste juhuslikku või pahatahtlikku muutmist pärast nende loomist.

Kui tundub, et stringi väärtus "muutub" (näiteks stringide ühendamisel), luuakse tegelikult uus String objekt.

// Algne string panga sees
String s1 = "Hello";

// Luudakse uus objekt "Hello World", s1 jätkab viitamist "Hello"-le
String s2 = s1 + " World";

Operatsioonide jaoks, mis nõuavad sagedast stringide muutmist, kasutatakse muudetavaid klasse nagu StringBuilder (mittejooksuaegne) või StringBuffer (jooksuaegne).