logo

Java string intern()

The Java stīgu klase intern() metode atgriež internēto virkni. Tas atgriež virknes kanonisko attēlojumu.

To var izmantot, lai atgrieztu virkni no atmiņas, ja tā ir izveidota ar jaunu atslēgvārdu. Tas izveido precīzu kaudzes virknes objekta kopiju String Constant Pool.

Paraksts

Intern() metodes paraksts ir norādīts zemāk:

 public String intern() 

Atgriežas

internēta virkne

String.intern() metodes nepieciešamība un darbība

Kad virkne ir izveidota Java, tā aizņem atmiņu kaudzē. Mēs arī zinām, ka stīgu klase ir nemainīga. Tāpēc ikreiz, kad mēs izveidojam virkni, izmantojot jauno atslēgvārdu, atbilstošas ​​virknes kaudzē tiek piešķirta jauna atmiņa neatkarīgi no masīva satura. Apsveriet šādu koda fragmentu.

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

Println priekšraksts tiek drukāts nepatiesi, jo katram virknes literālam tiek piešķirta atsevišķa atmiņa. Tādējādi atmiņā tiek izveidoti divi jauni virkņu objekti, t.i., str un str1. kurā ir dažādas atsauces.

alfabēta cipari

Mēs zinām, ka objekta izveide Java ir dārga darbība. Tāpēc, lai ietaupītu laiku, Java izstrādātāji nāca klajā ar String Constant Pool (SCP) koncepciju. SCP ir apgabals kaudzes atmiņā. Tas satur unikālas stīgas. Lai ievietotu stīgas stīgu baseinā, ir jāizsauc intern() metodi. Pirms objekta izveides virkņu pūlā JVM pārbauda, ​​vai virkne jau atrodas pūlā. Ja virkne ir, tiek atgriezta tās atsauce.

 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 

Iepriekš minētajā koda fragmentā String objektos tiek izsaukta metode intern (). Tāpēc atmiņa tiek piešķirta SCP. Otrajam priekšrakstam jauns virknes objekts netiek izveidots, jo str un str1 saturs ir vienāds. Tāpēc str1 tiek atgriezta atsauce uz objektu, kas izveidots pirmajā priekšrakstā. Tādējādi str un str1 norāda uz vienu un to pašu atmiņu. Tādējādi drukāšanas paziņojums tiek drukāts patiesi.

Java String intern() metodes piemērs

Faila nosaukums: 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 }} 
Izmēģiniet to tagad

Izvade:

 false true 

Java String intern() metodes 2. piemērs

Apskatīsim vēl vienu piemēru, lai izprastu stīgu intern koncepciju.

Faila nosaukums: 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 } } 
Izmēģiniet to tagad

Izvade:

 true false true false true false 

Punkti, kas jāatceras

Tālāk ir minēti daži svarīgi punkti, kas jāatceras saistībā ar intern() metodi:

1) Virknes literāls vienmēr izsauc intern() metodi neatkarīgi no tā, vai tiek pieminēta intern() metode kopā ar virknes literālu vai nē. Piemēram,

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

2) Ikreiz, kad mēs izveidojam virknes objektu, izmantojot jauns atslēgvārds, tiek izveidoti divi objekti. Piemēram,

 String str = new ('Hello World'); 

Šeit viens objekts tiek izveidots kaudzes atmiņā ārpus SCP, jo tiek izmantots jaunais atslēgvārds. Tā kā mēs esam ieguvuši virkni arī burtiski ('Hello World'); tāpēc SCP iekšienē tiek izveidots viens objekts, ja vien burtiskā 'Hello World' jau nav SCP.