logo

Niezmienny ciąg znaków w Javie

Ciąg znaków jest nieuniknionym typem zmiennej podczas pisania dowolnej aplikacji. Odwołania łańcuchowe służą do przechowywania różnych atrybutów, takich jak nazwa użytkownika, hasło itp. W Javie Obiekty string są niezmienne . Niezmienny oznacza po prostu niemodyfikowalny lub niezmienny.

Po utworzeniu obiektu String nie można zmienić jego danych ani stanu, ale tworzony jest nowy obiekt String.

Spróbujmy zrozumieć pojęcie niezmienności na przykładzie podanym poniżej:

Testimmutablestring.java

 class Testimmutablestring{ public static void main(String args[]){ String s='Sachin'; s.concat(' Tendulkar');//concat() method appends the string at the end System.out.println(s);//will print Sachin because strings are immutable objects } } 
Przetestuj teraz

Wyjście:

 Sachin 

Teraz można to zrozumieć na podstawie diagramu podanego poniżej. Tutaj Sachin się nie zmienia, ale tworzony jest nowy obiekt z Sachinem Tendulkarem. Dlatego String jest znany jako niezmienny.

Niezmienny ciąg znaków w Javie

Jak widać na powyższym rysunku, tworzone są dwa obiekty, ale S zmienna referencyjna w dalszym ciągu odnosi się do „Sachin”, a nie do „Sachin Tendulkar”.

Ale jeśli jawnie przypiszemy ją do zmiennej referencyjnej, będzie ona odnosić się do obiektu „Sachin Tendulkar”.

Na przykład:

Testowany ciąg znaków1.java

 class Testimmutablestring1{ public static void main(String args[]){ String s='Sachin'; s=s.concat(' Tendulkar'); System.out.println(s); } } 
Przetestuj teraz

Wyjście:

 Sachin Tendulkar 

W takim przypadku s wskazuje na „Sachin Tendulkar”. Proszę zauważyć, że obiekt Sachin nadal nie jest modyfikowany.

Dlaczego obiekty String są niezmienne w Javie?

Ponieważ Java używa koncepcji literału String. Załóżmy, że istnieje 5 zmiennych referencyjnych, wszystkie odnoszą się do jednego obiektu „Sachin”. Jeżeli jedna zmienna referencyjna zmieni wartość obiektu, będą miały na nią wpływ wszystkie zmienne referencyjne. Dlatego obiekty String są niezmienne w Javie.

Poniżej przedstawiono niektóre funkcje String, które sprawiają, że obiekty String są niezmienne.

1. Moduł ładujący klasy:

ClassLoader w Javie używa obiektu String jako argumentu. Weź pod uwagę, że jeśli obiekt String można modyfikować, wartość może zostać zmieniona, a klasa, która ma zostać załadowana, może być inna.

Aby uniknąć tego rodzaju błędnej interpretacji, String jest niezmienny.

2. Bezpieczny wątek:

Ponieważ obiekt String jest niezmienny, nie musimy dbać o synchronizację wymaganą podczas udostępniania obiektu w wielu wątkach.

3. Bezpieczeństwo:

Jak widzieliśmy podczas ładowania klas, niezmienne obiekty String pozwalają uniknąć dalszych błędów, ładując odpowiednią klasę. Dzięki temu aplikacja jest bezpieczniejsza. Rozważmy przykład oprogramowania bankowego. Nazwa użytkownika i hasło nie mogą być modyfikowane przez żadnego intruza, ponieważ obiekty typu String są niezmienne. Może to zwiększyć bezpieczeństwo aplikacji.

4. Miejsce na stercie:

Niezmienność String pomaga zminimalizować użycie pamięci sterty. Kiedy próbujemy zadeklarować nowy obiekt String, JVM sprawdza, czy wartość już istnieje w puli String, czy nie. Jeśli istnieje, nowa wartość zostanie przypisana do nowego obiektu. Ta funkcja umożliwia Javie efektywne wykorzystanie przestrzeni sterty.

Dlaczego klasa String jest ostateczna w Javie?

Powodem, dla którego klasa String jest ostateczna, jest to, że nikt nie może zastąpić metod klasy String. Aby mógł zapewnić te same funkcje nowym i starym obiektom String.