String Interning in Java
Heute werden wir String Interning oder die intern()
-Methode der String-Klasse besprechen. In den folgenden Punkten erfahren wir anhand eines Beispiels, was String Interning ist und warum wir es verwenden müssen.
Was ist String Interning in Java und wann wird es verwendet?
Java ist eine objektorientierte Programmiersprache. Wenn wir ein Objekt oder eine Variable erstellen, braucht es etwas Speicher, was bedeutet, dass wenn wir hundert Instanzen der Klasse String
erstellen, diese an verschiedenen Stellen im Speicher wie ein Heap gespeichert werden, was viel Platz beanspruchen kann.
Um das Problem anzugehen, haben die Java-Entwickler die Idee eines String Constant Pool (SCP) eingeführt, der Objekte enthält, die denselben Speicherpool teilen.
Das SCP enthält alle String-Objekte mit demselben Inhalt, was es zu einer einfachen und speichersparenden Aufgabe macht, das Objekt abzurufen, da wir nicht mehrere Objekte finden müssen. Wir brauchen nur ein einziges Objekt, das verweisen kann.
Um es besser zu verstehen, können wir uns ein einfaches Beispiel ansehen:
String str1 = new String("String A");
String str2 = new String("String A");
System.out.println(str1 == str2);
Ausgabe:
false
Im obigen Codestück gibt es zwei Objekte der String
-Klasse str1
und str2
, aber beide enthalten den gleichen Inhalt. Wenn wir sie mit dem Operator ==
vergleichen, um zu prüfen, ob sie gleich sind, zeigt die Ausgabe false
, was sie ungleich macht.
Dies geschieht, weil sie sich an verschiedenen Orten in einem Haufen befinden. Abgesehen davon, dass es sich um zwei Objekte handelt, gibt es keine signifikanten Unterschiede zwischen beiden Objekten.
Wenn wir das Konzept des String Interning verwenden, erzeugen wir nur ein einziges Objekt, nehmen wir es als strObj
an, und es enthält nun den Inhalt der Objekte. Wenn wir auf die Objekte zugreifen möchten, können wir auf dieses Objekt verweisen und den Inhalt abrufen.
Verwenden von String Interning in Java
Im folgenden Beispiel sehen wir, wie wir die Methode des String Interning mit intern()
verwenden können. Wir erstellen fünf String-Variablen.
Mit new String()
wird die erste String-Variable str
erstellt und der String im Konstruktor übergeben. Als nächstes erstellen wir ein weiteres String-Objekt mit dem Schlüsselwort new
, aber wir rufen die Methode intern()
aus dem Konstruktor String()
auf.
Die letzten drei Variablen sind String-Literale, wobei die letzte Variable str5
einen anderen Inhalt hat als alle anderen String-Variablen. Beachten Sie, dass wir bei den letzten drei Variablen keine intern()
-Methode verwendet haben, da die String-Literale bereits im SCP platziert sind, was bedeutet, dass das Interning automatisch auf sie angewendet wird.
Jetzt vergleichen wir die Variablen, um zu prüfen, ob sie übereinstimmen. Wir verwenden den Operator ==
, der true
zurückgibt, wenn das Objekt auf den genauen Speicherort verweist. Da wir die Methode intern()
nicht mit dem ersten String str1
aufrufen, befindet sie sich an einem anderen Speicherplatz und somit wird str1 == str2
nicht ausgeführt.
str2
ist im SCP, weil wir damit intern()
aufrufen, und wenn wir es mit str3
vergleichen, was ein String-Literal ist, gibt es true
zurück und führt die Ausgabe aus. Als nächstes vergleichen wir zwei String-Literale mit gleichem Inhalt, str3
und str4
, die die Nachricht in der Konsole ausgeben.
public class JavaExample {
public static void main(String[] args) {
String str1 = new String("String A");
String str2 = new String("String A").intern();
String str3 = "String A";
String str4 = "String A";
String str5 = "String B";
if (str1 == str2) {
System.out.println("str1 and str2 are in the same SCP");
}
if (str1 == str3) {
System.out.println("str1 and str3 are in the same SCP");
}
if (str2 == str3) {
System.out.println("str2 and str3 are in the same SCP");
}
if (str3 == str4) {
System.out.println("str3 and str4 are in the same SCP");
}
if (str4 == str5) {
System.out.println("str3 and str4 are in the same SCP");
}
}
}
Ausgabe:
str2 and str3 are in the same SCP
str3 and str4 are in the same SCP
Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedInVerwandter Artikel - Java String
- So führen Sie die Konvertierung von String in String-Array in Java durch
- Wie entferne ich eine Unterzeichenkette aus einer Zeichenkette in Java
- So konvertieren Sie Byte-Array in Hex-String in Java
- Wie man Java-String in Byte konvertiert
- Generieren Sie eine zufällige Zeichenkette in Java
- Die Swap-Methode in Java