Czym jest String w Javie?

String w Javie jest obiektem, który reprezentuje sekwencję znaków. Klasa String znajduje się w pakiecie java.lang, więc nie wymaga importowania. Stringi są niezmienne (immutable), co oznacza, że raz utworzony ciąg znaków nie może zostać zmieniony. Jeśli na stringu wykonuje się operacje modyfikujące, jak dodawanie (konkatenacja) czy wycinek (substring), tworzony jest nowy obiekt String, a oryginalny pozostaje niezmieniony.

Podstawowe Operacje na Stringach

  • Konkatenacja (łączenie stringów): Można użyć operatora +, aby połączyć dwa stringi.
  • Porównywanie: Do porównywania stringów służy metoda .equals(); == porównuje referencje, nie zawartość.
  • Wyszukiwanie: Istnieje wiele metod, jak .indexOf(), które pozwalają szukać określonych znaków lub sekwencji.
  • Wycinek (substring): Można uzyskać część stringa za pomocą metody .substring().
  • Zamiana znaków: Metoda .replace() pozwala na zamianę znaków lub sekwencji znaków w stringu.

Przykłady Użycia

Konkatenacja Stringów

String imie = "Jan";
String nazwisko = "Kowalski";
String pelneImie = imie + " " + nazwisko; // Jan Kowalski

Porównywanie Stringów

String a = new String("test");
String b = new String("test");
System.out.println(a.equals(b)); // true
System.out.println(a == b); // false, ponieważ to różne obiekty

Wyszukiwanie w Stringu

String zdanie = "Witaj, świecie!";
int indeks = zdanie.indexOf("świat"); // 7

Wycinek Stringu (Substring)

String zdanie = "Witaj, świecie!";
String slowo = zdanie.substring(7, 13); // świecie

Zamiana w Stringu

String zdanie = "Java to fajny język.";
String noweZdanie = zdanie.replace("fajny", "wspaniały"); // Java to wspaniały język.

Stringi a Pamięć

W Javie, z uwagi na niezmienność stringów, każda operacja tworząca nowy string skutkuje alokacją pamięci dla nowego obiektu. Aby zoptymalizować zarządzanie pamięcią, Java wprowadza pojęcie puli stringów (String Pool), gdzie stringi o tej samej wartości są reużywane. Można wymusić korzystanie z puli przez wywołanie metody .intern() na obiekcie String.

String c = "test"; // Używa puli stringów
String d = "test"; // Ponownie używa tego samego obiektu z puli
System.out.println(c == d); // true, dzięki reużywaniu obiektów z puli stringów