logo

Zašto je String nepromjenjiv ili konačan u Javi

U objektno orijentiranom programiranju, nepromjenjiv niz ili objekte koji se ne može mijenjati nakon što se stvori. Ali možemo promijeniti samo referencu na objekt. Ograničavamo se na promjenu samog objekta. The String je nepromjenjiv u Java zbog sigurnosti, sinkronizacije i konkurentnosti, predmemoriranja i učitavanja klasa. Razlog postavljanja niza kao finalnog je da se uništi nepromjenjivost i da se ne dopusti drugima da ga prošire.

String objekti su predmemorirani u String skupu, a to čini String nepromjenjiv . Predmemoriranim String literalima pristupa više klijenata. Dakle, uvijek postoji rizik, gdje radnja koju izvodi jedan klijent utječe na sve ostale klijente. Na primjer, ako jedan klijent izvrši radnju i promijeni vrijednost niza iz Pritisak u PRITISAK, svi preostali klijenti će također pročitati tu vrijednost. Zbog performansi, predmemoriranje String objekata bilo je važno, pa da bismo uklonili taj rizik, moramo String učiniti nepromjenjivim.

Zašto je String nepromjenjiv ili konačan u Javi

Ovo su još neki razlozi zašto String učiniti nepromjenjivim:

  • String skup ne može biti moguć ako String nije nepromjenjiv u Javi. Štedi se mnogo prostora na hrpi JRE . Na istu varijablu niza može se odnositi više od jedne varijable niza u skupu. Interniranje niza također ne može biti moguće ako niz nije nepromjenjiv.
  • Ako String ne učinimo nepromjenjivim, to će predstavljati ozbiljnu sigurnosnu prijetnju aplikaciji. Na primjer, korisnička imena baze podataka, lozinke se prosljeđuju kao nizovi za primanje veza baze podataka. The programiranje utičnica opisi hosta i porta također se prosljeđuju kao nizovi. String je nepromjenjiv, pa se njegova vrijednost ne može mijenjati. Ako String ne ostane nepromjenjiv, svaki haker može prouzročiti sigurnosni problem u aplikaciji promjenom referentne vrijednosti.
  • String je siguran za višenitnost zbog svoje nepromjenjivosti. Različite niti mogu pristupiti jednoj 'instanci niza'. Uklanja sinkronizaciju za sigurnost niti jer nizove činimo implicitno sigurnima za niti.
  • Nepromjenjivost daje sigurnost učitavanja ispravne klase pomoću Classloadera. Na primjer, pretpostavimo da imamo instancu u kojoj pokušavamo učitati klasu java.sql.Connection, ali promjene u referentnoj vrijednosti klase myhacked.Connection čine neželjene stvari našoj bazi podataka.

Razumimo koncept nepromjenjivog kroz primjer.

ImmutableString.java

 import java.util.*; class ImmutableString{ public static void main(String args[]){ String NewString = 'Hello'; NewString.concat('World'); System.out.println(NewString); } } 

Izlaz:

vrste mreže
Zašto je String nepromjenjiv ili konačan u Javi

Opis: Gornji primjer možemo razumjeti uz pomoć sljedećeg dijagrama:

Zašto je String nepromjenjiv ili konačan u Javi

U skupu konstantnih nizova, zdravo ostaje nepromijenjen, a s njim se kreira novi objekt niza Pozdrav svijete . To pokazuje da su nizovi nepromjenjivi. Referentna varijabla pokazuje na zdravo ne na Pozdrav svijete.

Ako želimo da se odnosi na Pozdrav svijete , moramo ga eksplicitno dodijeliti toj varijabli. Na primjer:

 import java.util.*; class ImmutableString{ public static void main(String args[]){ String NewString = 'Hello'; NewString = NewString.concat('World'); System.out.println(NewString); } } 

Izlaz:

Zašto je String nepromjenjiv ili konačan u Javi