У објектно оријентисаном програмирању, непроменљиви низ или објекти који се не може мењати када је креиран. Али можемо само да променимо референцу на објекат. Ограничавамо се на промену самог објекта. Тхе Стринг је непроменљив ин Јава због безбедности, синхронизације и конкурентности, кеширања и учитавања класа. Разлог да стринг буде коначан је да се уништи непроменљивост и да се не дозволи другима да је продуже.
јава низ
Стринг објекти се кеширају у скупу стрингова и он чини Стринг непроменљив . Кешираним стринг литералима приступа више клијената. Дакле, увек постоји ризик да радња коју изврши један клијент утиче на све остале клијенте. На пример, ако један клијент изврши радњу и промени вредност низа из Прессуре у ПРЕССУРЕ, сви преостали клијенти ће такође прочитати ту вредност. Из разлога перформанси, кеширање Стринг објеката је било важно, тако да да бисмо уклонили тај ризик, морамо да стринг учинимо непроменљивим.
Ово су још неки разлози да стринг постане непроменљив:
- Скуп стрингова не може бити могућ ако стринг није непроменљив у Јави. Много простора на хрпи се штеди ЈРЕ . На исту променљиву низа може се позвати више од једне променљиве низа у групи. Интернирање стрингова такође не може бити могуће ако стринг није непроменљив.
- Ако стринг не учинимо непроменљивим, он ће представљати озбиљну безбедносну претњу за апликацију. На пример, корисничка имена базе података, лозинке се прослеђују као стрингови за примање веза са базом података. Тхе програмирање сокета описи хоста и порта се такође прослеђују као стрингови. Стринг је непроменљив, тако да се његова вредност не може променити. Ако стринг не остане непроменљив, сваки хакер може да изазове безбедносни проблем у апликацији променом референтне вредности.
- Стринг је безбедан за вишенитност због своје непроменљивости. Различите нити могу приступити једној 'Стринг инстанци'. Уклања синхронизацију ради безбедности нити јер имплицитно чинимо низове безбедним за нити.
- Непроменљивост даје сигурност учитавања исправне класе помоћу Цласслоадер-а. На пример, претпоставимо да имамо инстанцу у којој покушавамо да учитамо класу јава.скл.Цоннецтион, али промене у референтној вредности у класи михацкед.Цоннецтион чине нежељене ствари нашој бази података.
Хајде да разумемо концепт непроменљивог кроз пример.
ИммутаблеСтринг.јава
import java.util.*; class ImmutableString{ public static void main(String args[]){ String NewString = 'Hello'; NewString.concat('World'); System.out.println(NewString); } }
Излаз:
Опис: Горњи пример можемо разумети уз помоћ следећег дијаграма:
У скупу константних низова, тхе Здраво остаје непромењен, а нови стринг објекат се креира са Здраво Свете . То показује да су стрингови непроменљиви. Референтна варијабла указује на Здраво не на Здраво Свете.
Ако желимо да се то односи на Здраво Свете , морамо га експлицитно доделити тој променљивој. На пример:
import java.util.*; class ImmutableString{ public static void main(String args[]){ String NewString = 'Hello'; NewString = NewString.concat('World'); System.out.println(NewString); } }
Излаз: