El Classe Java String becari() El mètode retorna la cadena internada. Retorna la representació canònica de la cadena.
Es pot utilitzar per retornar una cadena de memòria si la crea una paraula clau nova. Crea una còpia exacta de l'objecte de cadena de pila al grup de constants de cadena.
Signatura
La signatura del mètode intern() es mostra a continuació:
public String intern()
Devolucions
cadena internada
La necessitat i el funcionament del mètode String.intern().
Quan es crea una cadena a Java, ocupa memòria al munt. A més, sabem que la classe String és immutable. Per tant, sempre que creem una cadena utilitzant la paraula clau new, s'assigna memòria nova a l'emmagatzematge per a la cadena corresponent, independentment del contingut de la matriu. Considereu el fragment de codi següent.
String str = new String('Welcome to JavaTpoint.'); String str1 = new String('Welcome to JavaTpoint'); System.out.println(str1 == str); // prints false
La sentència println s'imprimeix falsa perquè s'assigna memòria separada per a cada literal de cadena. Així, es creen dos nous objectes de cadena a la memòria, és a dir, str i str1. que té diferents referències.
Sabem que crear un objecte és una operació costosa a Java. Per tant, per estalviar temps, els desenvolupadors de Java van idear el concepte de String Constant Pool (SCP). L'SCP és una àrea dins de la memòria heap. Conté les cadenes úniques. Per posar les cadenes al grup de cadenes, cal cridar a becari() mètode. Abans de crear un objecte a l'agrupació de cadenes, la JVM comprova si la cadena ja està present a l'agrupació o no. Si la cadena està present, es retorna la seva referència.
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
Al fragment de codi anterior, s'invoca el mètode intern() als objectes String. Per tant, la memòria s'assigna a l'SCP. Per a la segona instrucció, no es crea cap objecte de cadena nou, ja que el contingut de str i str1 són els mateixos. Per tant, es retorna la referència de l'objecte creat a la primera instrucció per a str1. Per tant, str i str1 apunten a la mateixa memòria. Per tant, la declaració d'impressió imprimeix vertadera.
Java String intern() Exemple de mètode
Nom de l'arxiu: 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 }}Prova-ho ara
Sortida:
false true
Java String intern() Mètode Exemple 2
Vegem un exemple més per entendre el concepte intern de cadena.
cadena java a int
Nom de l'arxiu: 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 } }Prova-ho ara
Sortida:
true false true false true false
Punts a recordar
A continuació es mostren alguns punts importants a recordar pel que fa al mètode intern():
1) Un literal de cadena sempre invoca el mètode intern(), tant si s'esmenta el mètode intern() juntament amb el literal de cadena com si no. Per exemple,
String s = 'd'.intern(); String p = 'd'; // compiler treats it as String p = 'd'.intern(); System.out.println(s == p); // prints true
2) Sempre que creem un objecte String utilitzant el nou paraula clau, es creen dos objectes. Per exemple,
String str = new ('Hello World');
Aquí, es crea un objecte a la memòria de pila fora de l'SCP a causa de l'ús de la paraula clau nova. Com també tenim la cadena literal ('Hola món'); per tant, es crea un objecte dins de l'SCP, sempre que el literal 'Hello World' ja no estigui present a l'SCP.