logo

Neměnný řetězec v Javě

Řetězec je nevyhnutelný typ proměnné při psaní jakéhokoli aplikačního programu. Řetězcové odkazy se používají k ukládání různých atributů, jako je uživatelské jméno, heslo atd. V Javě, Řetězcové objekty jsou neměnné . Immutable jednoduše znamená nemodifikovatelný nebo neměnný.

Jakmile je objekt String vytvořen, jeho data nebo stav nelze změnit, ale vytvoří se nový objekt String.

Pokusme se pochopit koncept neměnnosti na příkladu uvedeném níže:

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 } } 
Otestujte to hned

Výstup:

kbelíkový druh
 Sachin 

Nyní to lze pochopit z níže uvedeného diagramu. Zde se Sachin nezmění, ale vytvoří se nový objekt pomocí Sachin Tendulkar. Proto je řetězec známý jako neměnný.

Neměnný řetězec v Javě

Jak můžete vidět na obrázku výše, jsou vytvořeny dva objekty, ale s referenční proměnná stále odkazuje na „Sachin“, nikoli na „Sachin Tendulkar“.

Ale pokud ji explicitně přiřadíme k referenční proměnné, bude odkazovat na objekt 'Sachin Tendulkar'.

Například:

Testimmutablestring1.java

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

Výstup:

 Sachin Tendulkar 

V takovém případě s ukazuje na „Sachin Tendulkar“. Všimněte si prosím, že objekt Sachin stále není změněn.

Proč jsou objekty String v Javě neměnné?

Protože Java používá koncept řetězcového literálu. Předpokládejme, že existuje 5 referenčních proměnných, všechny odkazují na jeden objekt 'Sachin'. Pokud jedna referenční proměnná změní hodnotu objektu, bude ovlivněna všemi referenčními proměnnými. To je důvod, proč jsou objekty String v Javě neměnné.

Následují některé funkce String, díky kterým jsou objekty String neměnné.

1. ClassLoader:

ClassLoader v Javě používá jako argument objekt String. Zvažte, že pokud je objekt String modifikovatelný, hodnota se může změnit a třída, která má být načtena, se může lišit.

Aby se předešlo tomuto druhu nesprávné interpretace, je String neměnný.

2. Thread Safe:

Jelikož je objekt String neměnný, nemusíme se starat o synchronizaci, která je vyžadována při sdílení objektu ve více vláknech.

3. Zabezpečení:

Jak jsme viděli při načítání třídy, neměnné objekty String se vyhnou dalším chybám načtením správné třídy. To vede ke zvýšení bezpečnosti aplikačního programu. Zvažte příklad bankovního softwaru. Uživatelské jméno a heslo nemůže změnit žádný vetřelec, protože objekty String jsou neměnné. Díky tomu může být aplikační program bezpečnější.

4. Prostor haldy:

Neměnnost String pomáhá minimalizovat využití v paměti haldy. Když se pokusíme deklarovat nový objekt String, JVM zkontroluje, zda hodnota již ve fondu String existuje nebo ne. Pokud existuje, je novému objektu přiřazena stejná hodnota. Tato funkce umožňuje Javě efektivně využívat prostor haldy.

Proč je třída String v Javě konečná?

Důvodem, proč je třída String konečná, je to, že nikdo nemůže přepsat metody třídy String. Aby mohl poskytovat stejné funkce novým objektům String i těm starým.