logo

Immutable String i Java

En sträng är en oundviklig typ av variabel när du skriver vilket program som helst. Strängreferenser används för att lagra olika attribut som användarnamn, lösenord, etc. I Java, Strängobjekt är oföränderliga . Oföränderlig betyder helt enkelt oföränderlig eller oföränderlig.

När String-objekt har skapats kan dess data eller tillstånd inte ändras, men ett nytt String-objekt skapas.

Låt oss försöka förstå begreppet oföränderlighet genom exemplet nedan:

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 } } 
Testa det nu

Produktion:

 Sachin 

Nu kan det förstås av diagrammet nedan. Här ändras inte Sachin utan ett nytt objekt skapas med Sachin Tendulkar. Det är därför String är känt som oföränderlig.

Immutable String i Java

Som du kan se i ovanstående figur att två objekt skapas men s referensvariabel hänvisar fortfarande till 'Sachin' inte till 'Sachin Tendulkar'.

Men om vi uttryckligen tilldelar den till referensvariabeln kommer den att referera till 'Sachin Tendulkar'-objektet.

Till exempel:

Testimmutablestring1.java

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

Produktion:

också modell
 Sachin Tendulkar 

I ett sådant fall pekar s på 'Sachin Tendulkar'. Observera att Sachin-objektet fortfarande inte är modifierat.

Varför är strängobjekt oföränderliga i Java?

Som Java använder begreppet String literal. Anta att det finns 5 referensvariabler, alla refererar till ett objekt 'Sachin'. Om en referensvariabel ändrar värdet på objektet kommer den att påverkas av alla referensvariabler. Det är därför String-objekt är oföränderliga i Java.

Följande är några funktioner i String som gör String-objekt oföränderliga.

1. ClassLoader:

En ClassLoader i Java använder ett String-objekt som ett argument. Tänk på att om String-objektet är modifierbart kan värdet ändras och klassen som ska laddas kan vara annorlunda.

För att undvika denna typ av feltolkning är String oföränderlig.

2. Trådsäker:

Eftersom String-objektet är oföränderligt behöver vi inte ta hand om synkroniseringen som krävs när vi delar ett objekt över flera trådar.

3. Säkerhet:

Som vi har sett vid klassladdning undviker oföränderliga String-objekt ytterligare fel genom att ladda rätt klass. Detta leder till att applikationsprogrammet blir säkrare. Tänk på ett exempel på bankprogramvara. Användarnamnet och lösenordet kan inte ändras av någon inkräktare eftersom strängobjekt är oföränderliga. Detta kan göra applikationsprogrammet säkrare.

4. Högutrymme:

Strängens oföränderlighet hjälper till att minimera användningen i högminnet. När vi försöker deklarera ett nytt String-objekt kontrollerar JVM om värdet redan finns i String-poolen eller inte. Om det finns tilldelas samma värde till det nya objektet. Den här funktionen gör att Java kan använda heaputrymmet effektivt.

Varför är String-klassen Final i Java?

Anledningen till att String-klassen är final är att ingen kan åsidosätta metoderna för String-klassen. Så att det kan ge samma funktioner till de nya String-objekten såväl som till de gamla.