Un șir este un tip inevitabil de variabilă în timpul scrierii oricărui program de aplicație. Referințele șirurilor sunt folosite pentru a stoca diverse atribute, cum ar fi numele de utilizator, parola etc. În Java, Obiectele șir sunt imuabile . Imuabil înseamnă pur și simplu nemodificabil sau neschimbabil.
Odată ce obiectul String este creat, datele sau starea acestuia nu pot fi modificate, dar este creat un nou obiect String.
Să încercăm să înțelegem conceptul de imuabilitate prin exemplul de mai jos:
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 } }Testează-l acum
Ieșire:
Sachin
Acum poate fi înțeles prin diagrama prezentată mai jos. Aici Sachin nu este schimbat, dar este creat un nou obiect cu Sachin Tendulkar. De aceea String este cunoscut ca imuabil.
După cum puteți vedea în figura de mai sus, sunt create două obiecte dar s variabila de referință se referă în continuare la „Sachin” nu la „Sachin Tendulkar”.
Dar dacă o atribuim în mod explicit variabilei de referință, se va referi la obiectul „Sachin Tendulkar”.
De exemplu:
Testimmutablestring1.java
class Testimmutablestring1{ public static void main(String args[]){ String s='Sachin'; s=s.concat(' Tendulkar'); System.out.println(s); } }Testează-l acum
Ieșire:
Sachin Tendulkar
Într-un astfel de caz, s indică „Sachin Tendulkar”. Vă rugăm să rețineți că încă obiectul Sachin nu este modificat.
De ce obiectele String sunt imuabile în Java?
Deoarece Java folosește conceptul de String literal. Să presupunem că există 5 variabile de referință, toate se referă la un singur obiect „Sachin”. Dacă o variabilă de referință modifică valoarea obiectului, aceasta va fi afectată de toate variabilele de referință. De aceea, obiectele String sunt imuabile în Java.
Următoarele sunt câteva caracteristici ale String care fac obiectele String imuabile.
1. ClassLoader:
Un ClassLoader în Java folosește un obiect String ca argument. Luați în considerare, dacă obiectul String este modificabil, valoarea ar putea fi schimbată și clasa care ar trebui să fie încărcată ar putea fi diferită.
Pentru a evita acest tip de interpretare greșită, String este imuabil.
2. Thread Safe:
Deoarece obiectul String este imuabil, nu trebuie să avem grijă de sincronizarea necesară în timp ce partajăm un obiect pe mai multe fire.
3. Securitate:
După cum am văzut la încărcarea clasei, obiectele String imuabile evită erori suplimentare prin încărcarea clasei corecte. Acest lucru duce la creșterea siguranței programului de aplicație. Luați în considerare un exemplu de software bancar. Numele de utilizator și parola nu pot fi modificate de niciun intrus deoarece obiectele String sunt imuabile. Acest lucru poate face programul de aplicație mai sigur.
4. Spațiu heap:
Imuabilitatea String ajută la minimizarea utilizării în memoria heap. Când încercăm să declarăm un nou obiect String, JVM verifică dacă valoarea există deja în pool-ul String sau nu. Dacă există, aceeași valoare este atribuită noului obiect. Această caracteristică permite Java să utilizeze eficient spațiul heap.
De ce clasa String este Finală în Java?
Motivul pentru care clasa String este finală este că nimeni nu poate suprascrie metodele clasei String. Astfel încât să poată oferi aceleași caracteristici noilor obiecte String, precum și celor vechi.