Junior
Co wiesz o klasie String w Java?
sobes.tech AI
Odpowiedź od AI
String w Javie to niezmienna (immutable) klasa reprezentująca ciąg znaków.
Kluczowe cechy:
- Niezmienność: Po utworzeniu obiektu
String, jego zawartość nie może zostać zmieniona. Każda operacja, która wygląda na modyfikację łańcucha, w rzeczywistości zwraca nowy obiektString. To czyni obiektyStringbezpiecznymi w środowiskach wielowątkowych. - Pula łańcuchów (String Pool): Java utrzymuje pulę łańcuchów. Gdy tworzony jest literał łańcucha (np.
"cześć"), JVM najpierw sprawdza pulę. Jeśli taki łańcuch już istnieje, zwraca referencję do istniejącego obiektu. Jeśli nie, tworzy nowy obiekt w puli. Użycie konstruktoranew String("cześć")zawsze tworzy nowy obiekt poza pulą. - Przeciążenie operatora
+: Operator+jest przeciążony do konkatenacji łańcuchów. Kompilator może zoptymalizować konkatenację, używającStringBuilderlubStringBufferdla lepszej wydajności. - Implementacja interfejsów:
Stringimplementuje interfejsySerializable,Comparable<String>iCharSequence. - Metody: Klasa
Stringzapewnia wiele przydatnych metod do pracy z łańcuchami:length(),charAt(),substring(),indexOf(),equals(),equalsIgnoreCase(),startsWith(),endsWith(),trim(),replace(),split()i inne.
Przykłady tworzenia łańcuchów:
// Tworzenie przez literał (używa puli łańcuchów)
String str1 = "Hello";
// Tworzenie przez konstruktor (tworzy nowy obiekt poza pulą)
String str2 = new String("World");
// Tworzenie z tablicy znaków
char[] chars = {'J', 'a', 'v', 'a'};
String str3 = new String(chars);
Porównanie łańcuchów:
equals(): Porównuje zawartość łańcuchów.==: Porównuje referencje obiektów. Dla literałów łańcuchów o tym samym zawartości, zazwyczaj wskazują na tę samą referencję w puli, ale dla obiektów tworzonych za pomocąnew String(),==będziefalse, nawet jeśli zawartość jest taka sama.
String s1 = "java";
String s2 = "java";
String s3 = new String("java");
System.out.println(s1 == s2); // true (obie z puli)
System.out.println(s1 == s3); // false (s3 to nowy obiekt)
System.out.println(s1.equals(s3)); // true (porównuje zawartość)
Aby modyfikować łańcuchy w Javie, używa się klas StringBuilder (niezsynchronizowana, dla środowisk jedno-wątkowych) i StringBuffer (zsynchronizowana, dla środowisk wielowątkowych), które są mutowalne.
// Przykład z StringBuilder
StringBuilder sb = new StringBuilder("Hello");
sb.append(" World");
String result = sb.toString(); // Konwersja z powrotem na String
System.out.println(result); // Wypisze: Hello World