Wie der Name schon sagt, ist der String Pool in Java ein Pool von Strings, der im Java-Heap-Speicher gespeichert ist. Wir wissen, dass String eine besondere Klasse in Java ist und wir String-Objekte sowohl mit dem new-Operator als auch durch Angabe von Werten in doppelten Anführungszeichen erstellen können.
String Pool in Java
Hier ist ein Diagramm, das klar erklärt, wie der String Pool im Java Heap-Speicher verwaltet wird und was passiert, wenn wir verschiedene Methoden zum Erstellen von Strings verwenden. Der String Pool ist nur möglich, weil String in Java unveränderlich ist und seine Implementierung des Konzepts des String-Interring. Der String Pool ist auch ein Beispiel für das Flyweight-Entwurfsmuster. Der String Pool hilft dabei, viel Platz für die Java-Laufzeit zu sparen, obwohl es mehr Zeit benötigt, den String zu erstellen. Wenn wir doppelte Anführungszeichen verwenden, um einen String zu erstellen, sucht es zunächst nach einem String mit demselben Wert im String Pool. Wenn es gefunden wird, gibt es einfach die Referenz zurück, andernfalls wird ein neuer String im Pool erstellt und dann die Referenz zurückgegeben. Wenn wir jedoch den new-Operator verwenden, zwingen wir die String-Klasse dazu, ein neues String-Objekt im Heap-Speicher zu erstellen. Wir können die Methode
intern()
verwenden, um es in den Pool zu setzen oder auf ein anderes String-Objekt aus dem String Pool zu verweisen, das den gleichen Wert hat. Hier ist das Java-Programm für das String-Pool-Diagramm:
package com.journaldev.util;
public class StringPool {
/**
* Java String Pool example
* @param args
*/
public static void main(String[] args) {
String s1 = "Cat";
String s2 = "Cat";
String s3 = new String("Cat");
System.out.println("s1 == s2 :"+(s1==s2));
System.out.println("s1 == s3 :"+(s1==s3));
}
}
Die Ausgabe des obigen Programms ist:
s1 == s2 :true
s1 == s3 :false
Empfohlene Lektüre: Java String-Klasse
Wie viele Strings werden im String Pool erstellt?
Manchmal wird in einem Java-Interview eine Frage zum String Pool gestellt. Zum Beispiel, wie viele Strings werden in der folgenden Anweisung erstellt;
String str = new String("Cat");
In der obigen Anweisung wird entweder 1 oder 2 Strings erstellt. Wenn bereits ein String-Literal „Cat“ im Pool vorhanden ist, wird nur ein String „str“ im Pool erstellt. Wenn kein String-Literal „Cat“ im Pool vorhanden ist, wird es zuerst im Pool und dann im Heap-Speicher erstellt, so dass insgesamt 2 String-Objekte erstellt werden. Lese: Java String Interview Fragen
Source:
https://www.digitalocean.com/community/tutorials/what-is-java-string-pool