Objektiniame programavime, nekintamos stygos ar objektai kurios sukūrus negalima keisti. Bet mes galime pakeisti tik nuorodą į objektą. Apribojame paties objekto keitimą. The Styga yra nekintanti in Java dėl saugumo, sinchronizavimo ir lygiagretumo, talpyklos ir klasės įkėlimo. Stygos galutinio padarymo priežastis yra sunaikinti nekintamumą ir neleisti kitiems jo pratęsti.
Styginių objektai yra talpykloje Styginių telkinyje ir tai sukuria Styga nekintama . Talpykloje saugomus eilutės žodžius pasiekia keli klientai. Taigi visada yra rizika, kai vieno kliento veiksmai paveiks visus kitus klientus. Pavyzdžiui, jei vienas klientas atlieka veiksmą ir pakeičia eilutės reikšmę iš Pressure į PRESSURE, visi likę klientai taip pat skaitys tą reikšmę. Dėl našumo priežasčių String objektų kaupimas talpykloje buvo svarbus, todėl norėdami pašalinti šią riziką, turime padaryti eilutę nekintamą.
Tai yra dar kelios priežastys, dėl kurių styga tampa nekintama:
- Styginių telkinys negali būti įmanomas, jei eilutė yra nekintama Java. Sutaupo daug vietos krūvoje JRE . Tą patį eilutės kintamąjį gali nurodyti daugiau nei vienas eilutės kintamasis telkinyje. Stygų internavimas taip pat negali būti įmanomas, jei eilutė nebūtų nekintanti.
- Jei nepadarysime eilutės nekintamos, tai sukels rimtą grėsmę programos saugumui. Pavyzdžiui, duomenų bazių naudotojų vardai, slaptažodžiai perduodami kaip eilutės duomenų bazės ryšiams gauti. The lizdų programavimas pagrindinio kompiuterio ir prievado aprašymai taip pat perduodami kaip eilutės. Styga yra nekintanti, todėl jos vertės keisti negalima. Jei eilutė išlieka nepakitusi, bet kuris įsilaužėlis gali sukelti programos saugumo problemą, pakeisdamas atskaitos reikšmę.
- Dėl savo nekintamumo Styga yra saugi daugiasriegiam siūlui. Skirtingos gijos gali pasiekti vieną „Eilutės egzempliorių“. Tai pašalina sinchronizavimą, kad būtų užtikrintas gijų saugumas, nes netiesiogiai užtikriname, kad eilutės būtų saugios.
- Nekintamumas užtikrina teisingos klasės įkėlimą naudojant Classloader. Pavyzdžiui, tarkime, kad turime atvejį, kai bandome įkelti java.sql.Connection klasę, bet nuorodos myhacked.Connection klasės vertės pokyčiai mūsų duomenų bazei daro nepageidaujamus dalykus.
Supraskime nekintamumo sąvoką per pavyzdį.
ImmutableString.java
import java.util.*; class ImmutableString{ public static void main(String args[]){ String NewString = 'Hello'; NewString.concat('World'); System.out.println(NewString); } }
Išvestis:
Apibūdinimas: Aukščiau pateiktą pavyzdį galime suprasti naudodami šią diagramą:
Styginių nuolatiniame baseine Sveiki lieka nepakitęs ir sukuriamas naujas eilutės objektas su Labas pasauli . Tai rodo, kad stygos yra nekintamos. Nuorodos kintamasis nurodo į Sveiki ne į Labas pasauli.
Jei norime, tai reiškia Labas pasauli , turime jį aiškiai priskirti tam kintamajam. Pavyzdžiui:
import java.util.*; class ImmutableString{ public static void main(String args[]){ String NewString = 'Hello'; NewString = NewString.concat('World'); System.out.println(NewString); } }
Išvestis: