logo

Miksi merkkijono on muuttumaton tai lopullinen Javassa

Olio-ohjelmoinnissa muuttumaton merkkijono tai esineitä jota ei voi muokata sen luomisen jälkeen. Mutta voimme muuttaa vain viittausta objektiin. Rajoitamme itse objektin vaihtamista. The String on muuttumaton sisään Java turvallisuuden, synkronoinnin ja samanaikaisuuden, välimuistin ja luokan lataamisen takia. Syynä kielen viimeistelyyn on muuttaa muuttumattomuus ja estää muiden jatkamasta sitä.

lajitteluun arraylist java

String-objektit tallennetaan välimuistiin String-pooliin, ja se tekee Kieli muuttumaton . Useat asiakkaat voivat käyttää välimuistissa olevia merkkijonoliteraaaleja. Aina on siis olemassa riski, että yhden asiakkaan toiminta vaikuttaa kaikkiin muihin asiakkaisiin. Jos esimerkiksi yksi asiakas suorittaa toiminnon ja muuttaa merkkijonon arvosta Paine arvoksi PRESSURE, myös kaikki muut asiakkaat lukevat tämän arvon. Suorituskyvyn vuoksi merkkijono-objektien välimuisti oli tärkeä, joten tämän riskin poistamiseksi meidän on tehtävä merkkijonosta muuttumaton.

Miksi merkkijono on muuttumaton tai lopullinen Javassa

Tässä on joitain muita syitä tehdä merkkijonosta muuttumaton:

  • String pool ei voi olla mahdollista, jos merkkijono ei ole muuttumaton Javassa. Säästyy paljon kasatilaa JRE . Useampi kuin yksi merkkijonomuuttuja poolissa voi viitata samaan merkkijonomuuttujaan. Merkkijonojen internointi ei myöskään voi olla mahdollista, jos merkkijono ei olisi muuttumaton.
  • Jos emme tee merkkijonosta muuttumatonta, se muodostaa vakavan tietoturvauhan sovellukselle. Esimerkiksi tietokannan käyttäjätunnukset ja salasanat välitetään merkkijonoina tietokantayhteyksien vastaanottamiseksi. The pistorasian ohjelmointi isäntä- ja porttikuvaukset välitetään myös merkkijonoina. Merkkijono on muuttumaton, joten sen arvoa ei voi muuttaa. Jos merkkijono ei pysy muuttumattomana, mikä tahansa hakkeri voi aiheuttaa tietoturvaongelman sovelluksessa muuttamalla viitearvoa.
  • String on turvallinen monisäikeistykseen sen muuttumattomuuden vuoksi. Eri säikeet voivat käyttää yhtä 'merkkijono-ilmentymää'. Se poistaa synkronoinnin lankojen turvallisuuden vuoksi, koska teemme merkkijonoista lankaturvallisia implisiittisesti.
  • Muuttumattomuus takaa oikean luokan lataamisen Classloaderilla. Oletetaan esimerkiksi, että meillä on ilmentymä, jossa yritämme ladata java.sql.Connection-luokan, mutta muutokset myhacked.Connection-luokkaan viitatussa arvossa tekevät ei-toivottuja asioita tietokantaamme.

Ymmärretään muuttumattoman käsite esimerkin kautta.

ImmutableString.java

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

Lähtö:

Miksi merkkijono on muuttumaton tai lopullinen Javassa

Kuvaus: Voimme ymmärtää yllä olevan esimerkin seuraavan kaavion avulla:

Miksi merkkijono on muuttumaton tai lopullinen Javassa

Merkkijonovakiopoolissa Hei pysyy ennallaan, ja uusi merkkijonoobjekti luodaan kanssa Hei maailma . Se osoittaa, että kielet ovat muuttumattomia. Viitemuuttuja osoittaa Hei ei siihen Hei maailma.

Jos haluamme, että se viittaa Hei maailma , meidän on määritettävä se nimenomaisesti tälle muuttujalle. Esimerkiksi:

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

Lähtö:

Miksi merkkijono on muuttumaton tai lopullinen Javassa