Objektorientētajā programmēšanā nemainīga virkne vai objekti kuru pēc izveides nevar mainīt. Bet mēs varam mainīt tikai atsauci uz objektu. Mēs ierobežojam paša objekta maiņu. The Stīga ir nemainīga iekšā Java drošības, sinhronizācijas un vienlaicības, kešatmiņas un klases ielādes dēļ. Iemesls, kā padarīt stīgu galīgu, ir iznīcināt nemainīgumu un neļaut citiem to pagarināt.
String objekti tiek saglabāti kešatmiņā String pūlā, un tas padara Stīga nemainīga . Kešatmiņā saglabātajiem virknes burtiem piekļūst vairāki klienti. Tātad vienmēr pastāv risks, ka viena klienta darbība ietekmē visus pārējos klientus. Piemēram, ja viens klients veic darbību un maina virknes vērtību no Spiediens uz SPIEDIENS, visi pārējie klienti arī nolasīs šo vērtību. Veiktspējas iemeslu dēļ virknes objektu kešatmiņa bija svarīga, tāpēc, lai novērstu šo risku, mums ir jāpadara virkne nemainīga.
Šie ir vēl daži iemesli, kāpēc virkne ir nemainīga:
- String pūls nevar būt iespējams, ja virkne Java nav nemainīga. Daudz vietas tiek ietaupītas ar JRE . Uz vienu un to pašu virknes mainīgo var atsaukties vairāk nekā viens virknes mainīgais pūlā. Stīgu internēšana arī nevar būt iespējama, ja virkne nebūtu nemainīga.
- Ja mēs nepadarīsim virkni nemainīgu, tas radīs nopietnus drošības draudus lietojumprogrammai. Piemēram, datu bāzes lietotājvārdi, paroles tiek nodotas kā virknes datu bāzes savienojumu saņemšanai. The ligzdu programmēšana resursdatora un porta apraksti arī tiek nodoti kā virknes. Virkne ir nemainīga, tāpēc tās vērtību nevar mainīt. Ja virkne nepaliek nemainīga, jebkurš hakeris var izraisīt drošības problēmu lietojumprogrammā, mainot atsauces vērtību.
- Stīga ir droša daudzpavedienu veidošanai tās nemainīguma dēļ. Vienai virknes instancei var piekļūt dažādi pavedieni. Tas novērš sinhronizāciju, lai nodrošinātu pavedienu drošību, jo mēs netieši padarām virknes drošas pret pavedieniem.
- Nemainība nodrošina drošību, ka Classloader ielādē pareizo klasi. Piemēram, pieņemsim, ka mums ir gadījums, kad mēs cenšamies ielādēt klasi java.sql.Connection, bet izmaiņas norādītajā vērtībā uz myhacked.Connection klasi mūsu datu bāzei veic nevēlamas darbības.
Izpratīsim nemainīguma jēdzienu, izmantojot piemēru.
ImmutableString.java
import java.util.*; class ImmutableString{ public static void main(String args[]){ String NewString = 'Hello'; NewString.concat('World'); System.out.println(NewString); } }
Izvade:
Rajesh Khanna
Apraksts: Iepriekš minēto piemēru varam saprast, izmantojot šādu diagrammu:
Stīgu pastāvīgā baseinā, Sveiki paliek nemainīgs, un tiek izveidots jauns virknes objekts ar Sveika pasaule . Tas parāda, ka stīgas ir nemainīgas. Atsauces mainīgais norāda uz Sveiki nevis uz Sveika pasaule.
Ja mēs vēlamies, ka tas attiecas uz Sveika pasaule , mums tas ir tieši jāpiešķir šim mainīgajam. Piemēram:
import java.util.*; class ImmutableString{ public static void main(String args[]){ String NewString = 'Hello'; NewString = NewString.concat('World'); System.out.println(NewString); } }
Izvade: