Sobes.tech
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:

  1. 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
    
  2. 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.
    
  3. 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 von String-Objekten mit equals(), 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