logo

Immutable String v Jave

String je nevyhnutný typ premennej pri písaní akéhokoľvek aplikačného programu. Odkazy na reťazce sa používajú na ukladanie rôznych atribútov, ako je používateľské meno, heslo atď. Reťazcové objekty sú nemenné . Immutable jednoducho znamená nemeniteľné alebo nemenné.

Po vytvorení objektu String nemožno zmeniť jeho údaje alebo stav, ale vytvorí sa nový objekt String.

Pokúsme sa pochopiť pojem nemennosti na príklade uvedenom nižšie:

Testimmutablestring.java

 class Testimmutablestring{ public static void main(String args[]){ String s='Sachin'; s.concat(' Tendulkar');//concat() method appends the string at the end System.out.println(s);//will print Sachin because strings are immutable objects } } 
Vyskúšajte to

Výkon:

 Sachin 

Teraz to možno pochopiť pomocou diagramu uvedeného nižšie. Tu sa Sachin nemení, ale pomocou Sachin Tendulkar sa vytvorí nový objekt. Preto je reťazec známy ako nemenný.

Immutable String v Jave

Ako môžete vidieť na obrázku vyššie, že sú vytvorené dva objekty, ale s referenčná premenná stále odkazuje na „Sachin“, nie na „Sachin Tendulkar“.

Ak ju však explicitne priradíme k referenčnej premennej, bude odkazovať na objekt „Sachin Tendulkar“.

Napríklad:

Testimmutablestring1.java

 class Testimmutablestring1{ public static void main(String args[]){ String s='Sachin'; s=s.concat(' Tendulkar'); System.out.println(s); } } 
Vyskúšajte to

Výkon:

 Sachin Tendulkar 

V takom prípade s ukazuje na „Sachin Tendulkar“. Upozorňujeme, že objekt Sachin stále nie je upravený.

Prečo sú objekty typu String v jazyku Java nemenné?

Keďže Java používa koncept String literal. Predpokladajme, že existuje 5 referenčných premenných, pričom všetky sa vzťahujú na jeden objekt „Sachin“. Ak jedna referenčná premenná zmení hodnotu objektu, bude ovplyvnená všetkými referenčnými premennými. To je dôvod, prečo sú objekty String v Jave nemenné.

Nasleduje niekoľko funkcií String, vďaka ktorým sú objekty String nemenné.

1. ClassLoader:

ClassLoader v jazyku Java používa ako argument objekt String. Zvážte, že ak je objekt String modifikovateľný, hodnota sa môže zmeniť a trieda, ktorá sa má načítať, môže byť iná.

Aby sa predišlo tomuto druhu nesprávnej interpretácie, reťazec je nemenný.

2. Thread Safe:

Keďže objekt String je nemenný, nemusíme sa starať o synchronizáciu, ktorá je potrebná pri zdieľaní objektu vo viacerých vláknach.

3. Zabezpečenie:

Ako sme videli pri načítavaní triedy, nemenné objekty String sa vyhýbajú ďalším chybám načítaním správnej triedy. To vedie k zvýšeniu bezpečnosti aplikačného programu. Zoberme si príklad bankového softvéru. Používateľské meno a heslo nemôže zmeniť žiadny útočník, pretože objekty typu String sú nemenné. To môže zvýšiť bezpečnosť aplikačného programu.

4. Priestor haldy:

Nemennosť String pomáha minimalizovať využitie v pamäti haldy. Keď sa pokúsime deklarovať nový objekt String, JVM skontroluje, či hodnota už v oblasti String existuje alebo nie. Ak existuje, rovnaká hodnota sa priradí novému objektu. Táto funkcia umožňuje Jave efektívne využívať priestor haldy.

Prečo je trieda String v jazyku Java konečná?

Dôvod, prečo je trieda String konečná, je ten, že nikto nemôže prepísať metódy triedy String. Aby mohol poskytnúť rovnaké funkcie novým objektom String ako aj starým objektom.