Az objektumorientált programozásban a megváltoztathatatlan karakterlánc vagy objektumok amelyek létrehozása után nem módosíthatók. De csak az objektumra való hivatkozást tudjuk megváltoztatni. Korlátozzuk magának az objektumnak a megváltoztatását. A A húr változhatatlan ban ben Jáva a biztonság, a szinkronizálás és a párhuzamosság, a gyorsítótárazás és az osztálybetöltés miatt. A húr véglegessé tételének oka az, hogy a megváltoztathatatlanságot megsemmisítsék, és ne engedjék, hogy mások meghosszabbítsák.
A String objektumok gyorsítótárban vannak a String készletben, és ez teszi a A húr megváltoztathatatlan . A gyorsítótárazott karakterlánc-literálokhoz több ügyfél is hozzáfér. Tehát mindig fennáll annak a kockázata, hogy az egyik ügyfél által végrehajtott művelet az összes többi kliensre is hatással van. Például, ha az egyik ügyfél végrehajt egy műveletet, és megváltoztatja a karakterlánc értékét Pressure értékről NYOMÁS értékre, akkor az összes többi kliens is beolvassa ezt az értéket. A teljesítmény miatt fontos volt a String objektumok gyorsítótárazása, ezért ennek a kockázatnak a kiküszöböléséhez a karakterláncot megváltoztathatatlanná kell tennünk.
Íme néhány további ok, amiért a karakterlánc változhatatlanná válik:
- A String pool nem lehetséges, ha a String nem változtatható a Java-ban. Rengeteg halom helyet takarít meg JRE . Ugyanarra a karakterlánc-változóra egynél több karakterlánc-változó is hivatkozhat a készletben. A karakterlánc internálás sem lehetséges, ha a String nem változtatható.
- Ha nem tesszük megváltoztathatatlanná a karakterláncot, az komoly biztonsági fenyegetést jelent az alkalmazás számára. Például az adatbázis-felhasználónevek és jelszavak karakterláncként kerülnek átadásra az adatbázis-kapcsolatok fogadásához. A aljzat programozás A gazdagép- és portleírások is karakterláncként kerülnek átadásra. A String megváltoztathatatlan, így értéke nem változtatható. Ha a karakterlánc nem változtatható, bármely hacker biztonsági problémát okozhat az alkalmazásban a referenciaérték megváltoztatásával.
- A String változatlansága miatt biztonságos a többszálú feldolgozáshoz. Különböző szálak férhetnek hozzá egyetlen „String példányhoz”. Eltávolítja a szinkronizálást a szál biztonsága érdekében, mert a karakterláncokat implicit módon szálbiztossá tesszük.
- A változatlanság biztonságot ad a megfelelő osztály betöltéséhez az Classloader által. Tegyük fel például, hogy van egy példányunk, ahol megpróbáljuk betölteni a java.sql.Connection osztályt, de a myhacked.Connection osztály hivatkozott értékének változásai nem kívánt dolgokat okoznak az adatbázisunkban.
Értsük meg a megváltoztathatatlan fogalmát egy példán keresztül.
ImmutableString.java
import java.util.*; class ImmutableString{ public static void main(String args[]){ String NewString = 'Hello'; NewString.concat('World'); System.out.println(NewString); } }
Kimenet:
Leírás: A fenti példát a következő diagram segítségével érthetjük meg:
A húrkonstans készletben a Helló változatlan marad, és egy új karakterlánc objektum jön létre Helló Világ . Azt mutatja, hogy a húrok változhatatlanok. A referenciaváltozó a Helló nem a Helló Világ.
Ha azt akarjuk, hogy ez a Helló Világ , akkor kifejezetten hozzá kell rendelnünk ahhoz a változóhoz. Például:
import java.util.*; class ImmutableString{ public static void main(String args[]){ String NewString = 'Hello'; NewString = NewString.concat('World'); System.out.println(NewString); } }
Kimenet: