V objektno usmerjenem programiranju je nespremenljivi niz ali objekti ki ga ni mogoče spreminjati, ko je ustvarjen. Spremenimo pa lahko le sklic na predmet. Omejimo se na spremembo samega predmeta. The Niz je nespremenljiv v Java zaradi varnosti, sinhronizacije in sočasnosti, predpomnjenja in nalaganja razredov. Razlog za končni niz je uničiti nespremenljivost in preprečiti drugim, da bi ga razširili.
seznam v Javi
Objekti String so predpomnjeni v področju String, zaradi česar je Niz je nespremenljiv . Do predpomnjenih literalov niza dostopa več odjemalcev. Torej vedno obstaja tveganje, da dejanje, ki ga izvede ena stranka, vpliva na vse druge stranke. Na primer, če en odjemalec izvede dejanje in spremeni vrednost niza iz Tlak v PRITISK, bodo vsi preostali odjemalci prav tako prebrali to vrednost. Zaradi zmogljivosti je bilo predpomnjenje objektov String pomembno, zato moramo, da odstranimo to tveganje, narediti String Immutable.
To je še nekaj razlogov za nespremenljivost niza:
- Področje nizov ni mogoče, če niz ni nespremenljiv v Javi. Veliko prostora na kopici prihrani JRE . Na isto spremenljivko niza se lahko sklicuje več kot ena spremenljivka niza v bazenu. Interniranje nizov tudi ne more biti mogoče, če niz ni nespremenljiv.
- Če niza ne naredimo nespremenljivega, bo predstavljal resno varnostno grožnjo aplikaciji. Na primer, uporabniška imena baze podatkov in gesla se posredujejo kot nizi za sprejemanje povezav baze podatkov. The programiranje vtičnic tudi opisi gostiteljev in vrat se posredujejo kot nizi. Niz je nespremenljiv, zato njegove vrednosti ni mogoče spremeniti. Če niz ne ostane nespremenljiv, lahko kateri koli heker povzroči varnostno težavo v aplikaciji s spremembo referenčne vrednosti.
- Niz je varen za večnitnost zaradi svoje nespremenljivosti. Različne niti lahko dostopajo do enega 'primera niza'. Odstrani sinhronizacijo za varnost niti, ker nize naredimo implicitno varne za niti.
- Nespremenljivost zagotavlja varnost nalaganja pravilnega razreda s Classloaderjem. Na primer, recimo, da imamo primer, ko poskušamo naložiti razred java.sql.Connection, vendar spremembe v referenčni vrednosti razreda myhacked.Connection povzročajo neželene stvari naši bazi podatkov.
Razumejmo koncept nespremenljivega na primeru.
ImmutableString.java
import java.util.*; class ImmutableString{ public static void main(String args[]){ String NewString = 'Hello'; NewString.concat('World'); System.out.println(NewString); } }
Izhod:
Opis: Zgornji primer lahko razumemo s pomočjo naslednjega diagrama:
V bazenu konstantnih nizov je zdravo ostane nespremenjen in z njim se ustvari nov objekt niza Pozdravljen, svet . Pokaže, da so nizi nespremenljivi. Referenčna spremenljivka kaže na zdravo ne za Pozdravljen, svet.
Če želimo, da se nanaša na Pozdravljen, svet , ga moramo izrecno dodeliti tej spremenljivki. Na primer:
import java.util.*; class ImmutableString{ public static void main(String args[]){ String NewString = 'Hello'; NewString = NewString.concat('World'); System.out.println(NewString); } }
Izhod: