logo

Miért változhatatlan vagy végleges a karakterlánc a Java-ban?

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.

Miért változhatatlan vagy végleges a karakterlánc a Java-ban?

Í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:

Miért változhatatlan vagy végleges a karakterlánc a Java-ban?

Leírás: A fenti példát a következő diagram segítségével érthetjük meg:

Miért változhatatlan vagy végleges a karakterlánc a Java-ban?

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:

Miért változhatatlan vagy végleges a karakterlánc a Java-ban?