Junior
Was ist ein String-Pool in Java?
sobes.tech KI
Antwort von AI
String-Pool ist ein spezieller Speicherbereich im Java-Heap, in dem String-Literale und internierte Strings gespeichert werden. Das Hauptziel ist die Einsparung von Speicher durch die Wiederverwendung gleicher String-Werte.
Funktionsweise:
Wenn ein String-Literal erstellt wird (z.B. "hallo"), überprüft die JVM zunächst, ob bereits ein String mit diesem Wert im String-Pool existiert.
- Wenn der String existiert: Gibt die JVM eine Referenz auf das bereits vorhandene Objekt im Pool zurück, anstatt ein neues zu erstellen.
- Wenn der String nicht existiert: Erstellt die JVM ein neues
String-Objekt im Pool und gibt eine Referenz darauf zurück.
Erstellung von Strings und Pool:
- Mit einem String-Literal:
// "hallo" ist ein String-Literal String s1 = "hallo"; String s2 = "hallo"; // s1 und s2 verweisen auf dasselbe Objekt im String-Pool - Mit dem Konstruktor
new String():String s3 = new String("welt"); String s4 = new String("welt"); // s3 und s4 verweisen auf unterschiedliche Objekte im Heap, obwohl sie den gleichen Wert haben. // Das String-Literal "welt" kann im Pool sein, aber die Objekte s3 und s4 außerhalb. - Methode
intern():String s5 = new String("java"); // Die Methode intern() prüft, ob ein String mit diesem Wert im Pool existiert String s6 = s5.intern(); // Wenn ja, gibt sie die Referenz auf das Objekt im Pool zurück. // Wenn nein, fügt sie den aktuellen String in den Pool ein und gibt die Referenz zurück.
Vorteile des String-Pools:
- Speicherersparnis: Reduziert die Anzahl der duplizierten String-Objekte.
- Leistungssteigerung: Der Vergleich von String-Literalen (
==) kann schneller sein als der Vergleich vonString-Objekten mitequals(), wenn beide Referenzen auf dasselbe Objekt im Pool zeigen.
Wichtiger Hinweis:
Der Vergleich von Strings mit dem Operator == prüft, ob zwei Variablen auf dasselbe Objekt im Speicher verweisen. Für den Vergleich des Inhalts von Strings verwenden Sie immer die Methode equals().
String str1 = "abc"; // Im Pool
String str2 = "abc"; // Im Pool, gleiche Referenz
String str3 = new String("abc"); // Außerhalb des Pools
String str4 = str3.intern(); // Im Pool, gleiche Referenz wie str1 und str2
System.out.println(str1 == str2); // true
System.out.println(str1 == str3); // false
System.out.println(str1 == str4); // true
System.out.println(str1.equals(str3)); // true