I objektorienteret programmering er uforanderlig streng eller objekter som ikke kan ændres, når det først er oprettet. Men vi kan kun ændre referencen til objektet. Vi begrænser til at ændre selve objektet. Det String er uforanderlig i Java på grund af sikkerheden, synkronisering og samtidighed, caching og klasseindlæsning. Grunden til at gøre strengen endelig er at ødelægge uforanderligheden og ikke tillade andre at forlænge den.
String-objekterne cachelagres i String-puljen, og det gør Streng uforanderlig . De cachelagrede strengliteraler tilgås af flere klienter. Så der er altid en risiko, hvor handling, der udføres af en klient, påvirker alle andre klienter. For eksempel, hvis en klient udfører en handling og ændrer strengværdien fra Pressure til PRESSURE, vil alle resterende klienter også læse denne værdi. Af præstationsårsagen var caching af String-objekter vigtigt, så for at fjerne den risiko, er vi nødt til at gøre String uforanderlig.
java arrayliste
Dette er nogle flere grunde til at gøre String uforanderlig:
- String-puljen kan ikke være mulig, hvis String ikke er uforanderlig i Java. En masse bunkeplads spares ved JRE . Den samme strengvariabel kan henvises til af mere end én strengvariabel i puljen. String interning kan heller ikke være mulig, hvis strengen ikke ville være uforanderlig.
- Hvis vi ikke gør strengen uforanderlig, vil den udgøre en alvorlig sikkerhedstrussel mod applikationen. For eksempel sendes databasebrugernavne, adgangskoder som strenge for at modtage databaseforbindelser. Det socket programmering værts- og portbeskrivelser sendes også som strenge. Strengen er uforanderlig, så dens værdi kan ikke ændres. Hvis strengen ikke forbliver uforanderlig, kan enhver hacker forårsage et sikkerhedsproblem i applikationen ved at ændre referenceværdien.
- Strengen er sikker til multithreading på grund af dens uforanderlighed. Forskellige tråde kan få adgang til en enkelt 'String-instans'. Det fjerner synkroniseringen for trådsikkerhed, fordi vi implicit gør strenge trådsikre.
- Uforanderlighed giver sikkerhed for at indlæse den korrekte klasse af Classloader. Antag for eksempel, at vi har et tilfælde, hvor vi forsøger at indlæse java.sql.Connection-klassen, men ændringerne i den refererede værdi til klassen myhacked.Connection gør uønskede ting til vores database.
Lad os forstå begrebet uforanderlig gennem et eksempel.
ImmutableString.java
palindrom nummer
import java.util.*; class ImmutableString{ public static void main(String args[]){ String NewString = 'Hello'; NewString.concat('World'); System.out.println(NewString); } }
Produktion:
Beskrivelse: Vi kan forstå ovenstående eksempel ved hjælp af følgende diagram:
maskinlæringsmodeller
I strengen konstant pool, den Hej forbliver uændret, og et nyt strengobjekt oprettes med Hej Verden . Det viser, at strengene er uforanderlige. Referencevariablen peger på Hej ikke til Hej Verden.
Hvis vi ønsker det, henviser det til Hej Verden , skal vi udtrykkeligt tildele den til den variabel. For eksempel:
import java.util.*; class ImmutableString{ public static void main(String args[]){ String NewString = 'Hello'; NewString = NewString.concat('World'); System.out.println(NewString); } }
Produktion: