String Interning in Java

Rupam Yadav 12 Oktober 2023
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 Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn

Verwandter Artikel - Java String