Pula stringów

Pula stringów

Pula stringów to mechanizm optymalizacji polegający na przechowywaniu tylko jednej unikatowej kopii wartości Stringa. Pozwala to na znaczną redukcję ilości potrzebnej pamięci do przechowywania literałów znakowych. Taka optymalizacja możliwa jest dzięki temu, że Stringi są niemodyfikowalne (z ang. immutability).

  • Zobaczmy pierwszy przypadek:
String str1 = "JavaLeader.pl";
String str2 = "JavaLeader.pl";
 
System.out.println(str1 == str2);

wynik:

true

Operator == porównuje referencje obiektów. Referencje te są takie same.

  • Zobaczmy drugi przypadek:
String str1 = new String("JavaLeader.pl");
String str2 = new String("JavaLeader.pl");
System.out.println(str1 == str2);

wynik:

false

referencja są różne – tworzenie obiektu za pomocą słowa kluczowego new zawsze da inny adres obiektu!

  • Kolejny przypadek (pobieramy ciągi tekstowe z puli stringów z użyciem metody intern):
String str1 = new String("JavaLeader.pl");
String str2 = new String("JavaLeader.pl");
 
String str_intern  = str1.intern();
String str2_intern = str2.intern();
 
System.out.println(str_intern == str2_intern);

wynik:

true

Dobrą praktyką jest tworzenie Stringów z użyciem literałów znakowych aniżeli za pomocą new. Niech to Java zarządza Stringami!

Operator == a metoda equals()

Nie należy mylić tych dwóch pojęć. Metoda equals porównuje zawartość ciągów tekstowych, operator == porównuje referencje.

Konkatencja Stringów:

Konkatencja Stringów czyli ich łączenie wykonywana jest od lewej do prawej – pamiętajmy o tym bo z pozoru podobny kod może dać różne rezultaty!

String str1 = new String("JavaLeader.pl");
String str2 = new String("JavaLeader.pl");
 
System.out.println(str1  + 1 + 10);
System.out.println(1 + 10 + str2);

wynik:

JavaLeader.pl110
11JavaLeader.pl

Leave a comment

Your email address will not be published.


*