Sobes.tech
Junior

Was ist ein String-Pool in Java?

sobes.tech KI

Antwort von AI

Der String Pool (Zeichenketten-Pool) ist ein Bereich im Heap (Speicherbereich) der JVM, in dem String-Literale gespeichert werden. Wenn die JVM auf ein String-Literal trifft, überprüft sie zuerst diesen Pool. Wenn die Zeichenkette bereits existiert, wird eine Referenz auf das bestehende Objekt zurückgegeben. Falls nicht, wird ein neues String-Objekt im Pool erstellt und eine Referenz darauf zurückgegeben.

Vorteile:

  • Speicherersparnis: Mehrere Referenzen können auf dasselbe String-Objekt im Pool zeigen.
  • Leistung: Der Vergleich von Referenzen (==) für Strings im Pool ist schneller als der Vergleich des Inhalts der Strings (equals()).

Beispiel:

// Erstellt eine String im Pool (falls noch nicht vorhanden)
String s1 = "hello";

// Gibt eine Referenz auf dasselbe "hello"-Objekt im Pool zurück
String s2 = "hello";

// s1 und s2 verweisen auf dasselbe Objekt
System.out.println(s1 == s2); // Gibt true aus

// Erstellt ein neues String-Objekt "hello" im Heap, nicht im Pool
String s3 = new String("hello");

// s1 und s3 verweisen auf unterschiedliche Objekte
System.out.println(s1 == s3); // Gibt false aus

// Der Inhalt der Strings ist gleich
System.out.println(s1.equals(s3)); // Gibt true aus

Die Methode intern() kann verwendet werden, um explizit eine mit new String() erstellte String in den Pool zu legen oder um eine Referenz auf eine bestehende String im Pool mit demselben Inhalt zu erhalten.

// Erstellt ein neues String-Objekt "world" im Heap
String s4 = new String("world");

// Fügt "world" in den Pool ein (falls noch nicht vorhanden) und gibt die Referenz zurück
String s5 = s4.intern();

// Erstellt eine String im Pool (Referenz auf dasselbe Objekt, auf das jetzt s5 zeigt)
String s6 = "world";

// s5 und s6 verweisen auf dasselbe Objekt im Pool
System.out.println(s5 == s6); // Gibt true aus