Le Classe de chaîne Java interne() La méthode renvoie la chaîne interne. Il renvoie la représentation canonique de la chaîne.
Il peut être utilisé pour renvoyer une chaîne de la mémoire si elle est créée par un nouveau mot-clé. Il crée une copie exacte de l'objet chaîne de tas dans le pool de constantes de chaîne.
Signature
La signature de la méthode intern() est donnée ci-dessous :
public String intern()
Retour
chaîne internée
La nécessité et le fonctionnement de la méthode String.intern()
Lorsqu'une chaîne est créée en Java, elle occupe de la mémoire dans le tas. Nous savons également que la classe String est immuable. Par conséquent, chaque fois que nous créons une chaîne à l’aide du nouveau mot-clé, une nouvelle mémoire est allouée dans le tas pour la chaîne correspondante, quel que soit le contenu du tableau. Considérez l'extrait de code suivant.
entier en chaîne java
String str = new String('Welcome to JavaTpoint.'); String str1 = new String('Welcome to JavaTpoint'); System.out.println(str1 == str); // prints false
L'instruction println affiche false car une mémoire distincte est allouée pour chaque littéral de chaîne. Ainsi, deux nouveaux objets chaîne sont créés dans la mémoire, à savoir str et str1. qui contient des références différentes.
Nous savons que la création d’un objet est une opération coûteuse en Java. Par conséquent, pour gagner du temps, les développeurs Java ont proposé le concept de String Constant Pool (SCP). Le SCP est une zone à l’intérieur de la mémoire tas. Il contient les chaînes uniques. Afin de mettre les chaînes dans le pool de chaînes, il faut appeler le interne() méthode. Avant de créer un objet dans le pool de chaînes, la JVM vérifie si la chaîne est déjà présente dans le pool ou non. Si la chaîne est présente, sa référence est renvoyée.
String str = new String('Welcome to JavaTpoint').intern(); // statement - 1 String str1 = new String('Welcome to JavaTpoint').intern(); // statement - 2 System.out.println(str1 == str); // prints true
Dans l'extrait de code ci-dessus, la méthode intern() est invoquée sur les objets String. Par conséquent, la mémoire est allouée dans le SCP. Pour la deuxième instruction, aucun nouvel objet chaîne n'est créé car le contenu de str et str1 est le même. Par conséquent, la référence de l'objet créé dans la première instruction est renvoyée pour str1. Ainsi, str et str1 pointent tous deux vers la même mémoire. Par conséquent, l’instruction print s’imprime vrai.
Exemple de méthode Java String stagiaire()
Nom de fichier: InternExample.java
public class InternExample{ public static void main(String args[]){ String s1=new String('hello'); String s2='hello'; String s3=s1.intern();//returns string from pool, now it will be same as s2 System.out.println(s1==s2);//false because reference variables are pointing to different instance System.out.println(s2==s3);//true because reference variables are pointing to same instance }}Testez-le maintenant
Sortir:
activer java
false true
Méthode Java String stagiaire() Exemple 2
Voyons un autre exemple pour comprendre le concept de string stagiaire.
Nom de fichier: InternExample2.java
public class InternExample2 { public static void main(String[] args) { String s1 = 'Javatpoint'; String s2 = s1.intern(); String s3 = new String('Javatpoint'); String s4 = s3.intern(); System.out.println(s1==s2); // True System.out.println(s1==s3); // False System.out.println(s1==s4); // True System.out.println(s2==s3); // False System.out.println(s2==s4); // True System.out.println(s3==s4); // False } }Testez-le maintenant
Sortir:
true false true false true false
Points à retenir
Voici quelques points importants à retenir concernant la méthode intern() :
1) Une chaîne littérale appelle toujours la méthode intern(), que l'on mentionne ou non la méthode intern() avec la chaîne littérale. Par exemple,
String s = 'd'.intern(); String p = 'd'; // compiler treats it as String p = 'd'.intern(); System.out.println(s == p); // prints true
2) Chaque fois que nous créons un objet String en utilisant le nouveau mot-clé, deux objets sont créés. Par exemple,
String str = new ('Hello World');
Ici, un objet est créé dans la mémoire tas en dehors du SCP en raison de l'utilisation du nouveau mot-clé. Comme nous avons également la chaîne littérale (« Hello World » ); par conséquent, un objet est créé à l'intérieur du SCP, à condition que le littéral « Hello World » ne soit déjà pas présent dans le SCP.