logo

Prečo je reťazec nemenný alebo konečný v jazyku Java

V objektovo orientovanom programovaní, nemenný reťazec alebo predmety ktoré sa po vytvorení už nedajú upraviť. Ale môžeme zmeniť iba odkaz na objekt. Obmedzujeme na zmenu samotného objektu. The Reťazec je nemenný v Java z dôvodu bezpečnosti, synchronizácie a súbežnosti, ukladania do vyrovnávacej pamäte a načítania tried. Dôvodom, prečo je struna konečná, je zničiť nemennosť a nedovoliť iným, aby ju predlžovali.

Objekty String sa ukladajú do vyrovnávacej pamäte v fonde reťazcov a to vytvára Reťazec nemenný . K uloženým reťazcom literálov pristupuje viacero klientov. Vždy teda existuje riziko, že akcia vykonaná jedným klientom ovplyvní všetkých ostatných klientov. Napríklad, ak jeden klient vykoná akciu a zmení hodnotu reťazca z Pressure na PRESSURE, všetci zostávajúci klienti tiež prečítajú túto hodnotu. Z dôvodu výkonu bolo ukladanie objektov String do vyrovnávacej pamäte dôležité, takže na odstránenie tohto rizika musíme vytvoriť reťazec Immutable.

pete davidson
Prečo je reťazec nemenný alebo konečný v jazyku Java

Toto je niekoľko ďalších dôvodov, prečo je reťazec nemenný:

  • Fond reťazcov nemôže byť možný, ak reťazec nie je nemenný v jazyku Java. Tým sa ušetrí veľa miesta na halde JRE . Na tú istú reťazcovú premennú môže odkazovať viac ako jedna reťazcová premenná v oblasti. Vloženie reťazca tiež nemôže byť možné, ak by reťazec nebol nemenný.
  • Ak nespravíme reťazec nemenným, bude to predstavovať vážnu bezpečnostnú hrozbu pre aplikáciu. Napríklad databázové užívateľské mená, heslá sa odovzdávajú ako reťazce na prijímanie databázových pripojení. The programovanie zásuvky popisy hostiteľa a portu sa tiež odovzdávajú ako reťazce. Reťazec je nemenný, takže jeho hodnotu nemožno zmeniť. Ak reťazec nezostane nemenný, môže každý hacker spôsobiť problém so zabezpečením aplikácie zmenou referenčnej hodnoty.
  • String je bezpečný pre multithreading kvôli jeho nemennosti. Rôzne vlákna môžu pristupovať k jednej inštancii reťazca. Odstraňuje synchronizáciu pre bezpečnosť vlákien, pretože implicitne robíme reťazce bezpečné pre vlákna.
  • Immutabilita dáva istotu načítania správnej triedy Classloaderom. Predpokladajme napríklad, že máme inštanciu, v ktorej sa pokúšame načítať triedu java.sql.Connection, ale zmeny v odkazovanej hodnote na triedu myhacked.Connection spôsobujú v našej databáze nežiaduce veci.

Poďme pochopiť koncept nemenného na príklade.

ImmutableString.java

 import java.util.*; class ImmutableString{ public static void main(String args[]){ String NewString = 'Hello'; NewString.concat('World'); System.out.println(NewString); } } 

Výkon:

Prečo je reťazec nemenný alebo konečný v jazyku Java

Popis: Vyššie uvedený príklad môžeme pochopiť pomocou nasledujúceho diagramu:

sql ddl príkazy
Prečo je reťazec nemenný alebo konečný v jazyku Java

V reťazci konštantný fond, Ahoj zostane nezmenený a vytvorí sa nový objekt reťazca s Ahoj Svet . Ukazuje, že struny sú nemenné. Referenčná premenná ukazuje na Ahoj nie k Ahoj Svet.

Ak chceme, aby sa to týkalo Ahoj Svet , musíme ju explicitne priradiť k tejto premennej. Napríklad:

 import java.util.*; class ImmutableString{ public static void main(String args[]){ String NewString = 'Hello'; NewString = NewString.concat('World'); System.out.println(NewString); } } 

Výkon:

Prečo je reťazec nemenný alebo konečný v jazyku Java