Internat de chaînes en Java

Rupam Yadav 12 octobre 2023
Internat de chaînes en Java

Aujourd’hui nous allons parler de String Interning ou de la méthode intern() de la classe String. Dans les points ci-dessous, nous apprendrons ce qu’est String Interning et pourquoi nous devons l’utiliser, à l’aide d’un exemple.

Qu’est-ce que String Interning en Java et quand l’utiliser

Java est un langage de programmation orienté objet. Lorsque nous créons un objet ou une variable, cela prend de la mémoire, ce qui signifie que si nous créons une centaine d’instances de la classe String, elles seront stockées à différents endroits de la mémoire comme un tas, ce qui peut consommer beaucoup d’espace.

Pour résoudre le problème, les développeurs Java ont introduit l’idée d’un String Constant Pool (SCP) contenant des objets partageant le même pool de mémoire.

Le SCP contient tous les objets String avec le même contenu, ce qui en fait une tâche facile et économe en mémoire pour récupérer l’objet car nous n’avons pas à trouver plusieurs objets. Nous n’avons besoin que d’un seul objet qui puisse faire référence.

Pour mieux comprendre, nous pouvons jeter un œil à un exemple simple :

String str1 = new String("String A");
String str2 = new String("String A");

System.out.println(str1 == str2);

Production :

false

Dans le morceau de code ci-dessus, il y a deux objets de la classe String str1 et str2, mais les deux contiennent le même contenu. Si nous les comparons en utilisant l’opérateur == pour vérifier s’ils sont égaux, la sortie indique false, ce qui les rend inégaux.

Cela arrive parce qu’ils sont situés à différents endroits dans un tas. En plus d’être deux objets, il n’y a pas de différences significatives dans les deux objets.

Si nous utilisons le concept de String Interning, nous ne créons qu’un seul objet, supposons-le comme strObj, et maintenant il contient le contenu des objets. Lorsque nous voulons accéder aux objets, nous pouvons nous référer à cet objet et obtenir le contenu.

Utilisation de String Interning en Java

Dans l’exemple ci-dessous, nous voyons comment nous pouvons utiliser la méthode de String Interning en utilisant le intern(). Nous créons cinq variables String.

La première variable String str est créée à l’aide de new String(), et la chaîne est passée dans le constructeur. Ensuite, nous créons un autre objet chaîne en utilisant le mot-clé new, mais nous appelons la méthode intern() à partir du constructeur String().

Les trois dernières variables sont des chaînes littérales, dans lesquelles la dernière variable, str5, contient un contenu différent de toutes les autres variables de chaîne. Remarquez que nous n’avons pas utilisé de méthode intern() avec les trois dernières variables car les chaînes de caractères sont déjà placées dans le SCP, ce qui signifie que l’internage leur est appliqué automatiquement.

Maintenant, nous comparons les variables pour vérifier si elles correspondent. Nous utilisons l’opérateur == qui renvoie true si l’objet référence l’emplacement mémoire exact. Comme nous n’appelons pas la méthode intern() avec la première chaîne str1, elle se trouve dans un emplacement mémoire différent, et donc str1 == str2 ne s’exécute pas.

str2 est dans le SCP parce que nous appelons intern() avec lui, et quand nous le comparons avec str3, qui est un littéral de chaîne, il renvoie true et exécute la sortie. Ensuite, nous comparons deux littéraux de chaîne avec le même contenu, str3 et str4, qui génèrent le message dans la console.

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");
    }
  }
}

Production :

str2 and str3 are in the same SCP str3 and str4 are in the same SCP
Auteur: Rupam Yadav
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

Article connexe - Java String