logo

Java String intern()

The Java stygų klasė praktikantas () metodas grąžina įterptą eilutę. Tai grąžina kanoninį eilutės atvaizdavimą.

Jis gali būti naudojamas norint grąžinti eilutę iš atminties, jei ji sukurta naudojant naują raktinį žodį. Jis sukuria tikslią krūvos eilutės objekto kopiją eilutės pastoviame telkinyje.

Parašas

Intern() metodo parašas pateiktas žemiau:

 public String intern() 

Grąžina

internuota styga

String.intern() metodo poreikis ir veikimas

Kai eilutė sukuriama Java, ji užima atmintį krūvoje. Taip pat žinome, kad stygų klasė yra nekintanti. Todėl, kai sukuriame eilutę naudodami naują raktinį žodį, nauja atmintis yra priskiriama atitinkamos eilutės krūvoje, neatsižvelgiant į masyvo turinį. Apsvarstykite šį kodo fragmentą.

 String str = new String('Welcome to JavaTpoint.'); String str1 = new String('Welcome to JavaTpoint'); System.out.println(str1 == str); // prints false 

Teiginys println spausdina klaidingą, nes kiekvienai eilutės literalui yra skirta atskira atmintis. Taigi atmintyje sukuriami du nauji eilutės objektai, ty str ir str1. kuriame yra įvairių nuorodų.

Žinome, kad objekto kūrimas yra brangi „Java“ operacija. Todėl, norėdami sutaupyti laiko, „Java“ kūrėjai sugalvojo „String Constant Pool“ (SCP) koncepciją. SCP yra sritis krūvos atminties viduje. Jame yra unikalių stygų. Norint įdėti stygas į stygų telkinį, reikia iškviesti praktikantas () metodas. Prieš kurdamas objektą eilučių telkinyje, JVM patikrina, ar eilutė jau yra telkinyje, ar ne. Jei eilutė yra, grąžinama jos nuoroda.

 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 

Aukščiau pateiktame kodo fragmente String objektuose iškviečiamas intern() metodas. Todėl atmintis paskirstoma SCP. Antrojo sakinio atveju naujas eilutės objektas nesukuriamas, nes str ir str1 turinys yra tas pats. Todėl str1 grąžinama pirmajame sakinyje sukurto objekto nuoroda. Taigi str ir str1 nurodo tą pačią atmintį. Taigi spausdinimo teiginys spausdinamas tiesa.

Java String intern() metodo pavyzdys

Failo pavadinimas: 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 }} 
Išbandykite dabar

Išvestis:

 false true 

Java String intern() metodo 2 pavyzdys

Pažiūrėkime dar vieną pavyzdį, kad suprastume stygų intern koncepciją.

Failo pavadinimas: 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 } } 
Išbandykite dabar

Išvestis:

 true false true false true false 

Taškai, kuriuos reikia prisiminti

Toliau pateikiami keli svarbūs dalykai, kuriuos reikia atsiminti naudojant intern() metodą:

1) Styginių literalas visada iškviečia metodą intern(), nesvarbu, ar paminėtas intern() metodas kartu su eilutės literaliu, ar ne. Pavyzdžiui,

 String s = 'd'.intern(); String p = 'd'; // compiler treats it as String p = 'd'.intern(); System.out.println(s == p); // prints true 

2) Kai kuriame eilutės objektą naudodami naujas raktažodį, sukuriami du objektai. Pavyzdžiui,

 String str = new ('Hello World'); 

Čia vienas objektas sukuriamas krūvos atmintyje už SCP ribų, nes naudojamas naujas raktinis žodis. Kadangi mes taip pat gavome eilutę pažodžiui („Hello World“); todėl SCP viduje sukuriamas vienas objektas, jei pažodinio žodžio „Hello World“ jau nėra SCP.