В обектно-ориентираното програмиране, неизменен низ или обекти който не може да бъде модифициран, след като бъде създаден. Но можем само да променим препратката към обекта. Ограничаваме да променим самия обект. The Низът е неизменен в Java поради сигурността, синхронизацията и паралелността, кеширането и зареждането на класове. Причината да направим низ окончателен е да унищожим неизменността и да не позволим на други да го разширят.
java променлива променлива
String обектите се кешират в String пула и това прави Низът е неизменен . Кешираните String литерали са достъпни от множество клиенти. Така че винаги има риск, когато действието, извършено от един клиент, засяга всички останали клиенти. Например, ако един клиент извърши действие и промени стойността на низа от Налягане на НАЛЯГАНЕ, всички останали клиенти също ще прочетат тази стойност. Поради причината за производителността, кеширането на String обекти беше важно, така че за да премахнем този риск, трябва да направим String Immutable.
Това са още няколко причини да направите String неизменен:
- Пулът String не може да бъде възможен, ако String не е неизменен в Java. Много място в купчина се спестява от JRE . Една и съща низова променлива може да бъде препратена от повече от една низова променлива в пула. Интернирането на низ също не може да бъде възможно, ако низът не е неизменен.
- Ако не направим String неизменен, това ще представлява сериозна заплаха за сигурността на приложението. Например потребителските имена и паролите на базата данни се предават като низове за получаване на връзки към базата данни. The програмиране на сокет описанията на хоста и порта също се предават като низове. Низът е неизменен, така че стойността му не може да бъде променяна. Ако низът не остане неизменен, всеки хакер може да причини проблем със сигурността в приложението, като промени референтната стойност.
- Низът е безопасен за многопоточност поради своята неизменност. Различни нишки имат достъп до един „Екземпляр на низ“. Премахва синхронизирането за безопасност на нишката, защото имплицитно правим низове безопасни за нишки.
- Неизменността дава сигурността на зареждането на правилния клас от Classloader. Да предположим например, че имаме екземпляр, в който се опитваме да заредим клас java.sql.Connection, но промените в референтната стойност на класа myhacked.Connection правят нежелани неща в нашата база данни.
Нека разберем концепцията за immutable чрез пример.
ImmutableString.java
лента с инструменти за бърз достъп до ms word
import java.util.*; class ImmutableString{ public static void main(String args[]){ String NewString = 'Hello'; NewString.concat('World'); System.out.println(NewString); } }
Изход:
описание: Можем да разберем горния пример с помощта на следната диаграма:
В низовия константен пул, the Здравейте остава непроменен и се създава нов низов обект с Здравей свят . Това показва, че низовете са неизменни. Референтната променлива сочи към Здравейте не към Здравей свят.
заспиване за javascript
Ако искаме това се отнася до Здравей свят , трябва изрично да го присвоим на тази променлива. Например:
import java.util.*; class ImmutableString{ public static void main(String args[]){ String NewString = 'Hello'; NewString = NewString.concat('World'); System.out.println(NewString); } }
Изход: