Junior
Opowiedz o klasie String w języku programowania Java.
sobes.tech AI
Odpowiedź od AI
Klasa String w Javie reprezentuje niezmienniczą sekwencję znaków.
Główne cechy i właściwości:
- Niezmienniczość: Po utworzeniu obiektu
String, jego zawartość nie może być zmieniona. Każda operacja, która wydaje się modyfikować łańcuch (np. konkatenacja), w rzeczywistości tworzy nowy obiektString. To zwiększa bezpieczeństwo i bezpieczeństwo w środowiskach wielowątkowych. - Przeciążenie operatora
+: Dla łańcuchów operator+został przeciążony, aby wykonywać konkatenację. - Dwa sposoby tworzenia:
- Za pomocą literału łańcucha:
String s1 = "Hello";- tworzony w puli łańcuchów (String Pool). - Za pomocą operatora
new:String s2 = new String("World");- tworzony na stercie (Heap), może tworzyć nowy obiekt nawet jeśli istnieje już taki sam literał w puli.
- Za pomocą literału łańcucha:
- Pula łańcuchów (String Pool): Obszar na stercie, w którym przechowywane są literały łańcuchów w celu optymalizacji pamięci. Podczas tworzenia literału JVM najpierw sprawdza pulę. Jeśli taki łańcuch już istnieje, zwraca odwołanie do istniejącego obiektu. Jeśli nie, tworzy nowy obiekt i umieszcza go w puli.
- Przydatne główne metody:
length(): Zwraca długość łańcucha.charAt(int index): Zwraca znak na podanym indeksie.substring(int beginIndex, int endIndex): Zwraca podłańcuch.contains(CharSequence s): Sprawdza, czy łańcuch zawiera podaną sekwencję znaków.indexOf(int ch)/indexOf(String str): Zwraca pierwszy indeks wystąpienia znaku lub podłańcucha.equals(Object anObject): Porównuje zawartość łańcuchów. Ważne jest używanieequals()do porównywania zawartości, a nie==, które porównuje odwołania.equalsIgnoreCase(String anotherString): Porównuje łańcuchy bez uwzględniania wielkości liter.replace(char oldChar, char newChar)/replace(CharSequence target, CharSequence replacement): Zamienia znaki lub podłańcuchy.trim(): Usuwa spacje z początku i końca.split(String regex): Dzieli łańcuch na podłańcuchy według separatora.
Przykład tworzenia i niektórych operacji:
// Tworzenie za pomocą literału
String str1 = "Java";
// Tworzenie za pomocą new
String str2 = new String("Java");
// Konkatenacja
String str3 = str1 + " is amazing";
// Porównanie zawartości (używając equals, a nie ==)
boolean areEqualContent = str1.equals(str2); // true
// Porównanie odwołań (używając ==)
boolean areEqualReference = (str1 == str2); // false
// Długość łańcucha
int length = str3.length();
// Pobranie znaku
char firstChar = str1.charAt(0); // 'J'
// Sprawdzenie zawartości
boolean containsIs = str3.contains("is"); // true
Niezmienniczość String może prowadzić do nieefektywności przy wielokrotnych modyfikacjach łańcucha, ponieważ za każdym razem tworzony jest nowy obiekt. Dla takich scenariuszy lepiej używać StringBuilder lub StringBuffer.