logo

Java String intern()

The Trieda Java String stážista() metóda vráti vložený reťazec. Vráti kanonickú reprezentáciu reťazca.

java dizajnový vzor

Môže sa použiť na vrátenie reťazca z pamäte, ak je vytvorený pomocou nového kľúčového slova. Vytvorí presnú kópiu objektu reťazca haldy v oblasti konštantných reťazcov.

Podpis

Podpis metódy intern() je uvedený nižšie:

 public String intern() 

Návraty

internovaný reťazec

Potreba a fungovanie metódy String.intern().

Keď je reťazec vytvorený v jazyku Java, zaberá pamäť v halde. Tiež vieme, že trieda String je nemenná. Preto vždy, keď vytvoríme reťazec pomocou kľúčového slova new, v halde sa pridelí nová pamäť pre zodpovedajúci reťazec, ktorý je bez ohľadu na obsah poľa. Zvážte nasledujúci útržok kódu.

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

Príkaz println vypíše hodnotu false, pretože pre každý reťazcový literál je alokovaná samostatná pamäť. V pamäti sa tak vytvoria dva nové reťazcové objekty, tj str a str1. ktorá obsahuje rôzne referencie.

zoznam vytvárania java

Vieme, že vytvorenie objektu je v Jave nákladná operácia. Preto, aby ušetrili čas, vývojári Java prišli s konceptom String Constant Pool (SCP). SCP je oblasť vo vnútri pamäte haldy. Obsahuje jedinečné reťazce. Aby ste mohli reťazce vložiť do fondu reťazcov, musíte zavolať stážista() metóda. Pred vytvorením objektu v oblasti reťazcov JVM skontroluje, či sa reťazec už v oblasti nachádza alebo nie. Ak je reťazec prítomný, vráti sa jeho odkaz.

 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 

Vo vyššie uvedenom úryvku kódu je metóda intern() vyvolaná na objektoch String. Preto je pamäť alokovaná v SCP. Pre druhý príkaz sa nevytvorí žiadny nový objekt typu reťazec, pretože obsah str a str1 je rovnaký. Preto sa pre str1 vráti odkaz na objekt vytvorený v prvom príkaze. Str a str1 teda ukazujú na rovnakú pamäť. Preto sa vyhlásenie o tlači vytlačí ako pravdivé.

Príklad metódy Java String inter()

Názov súboru: 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 }} 
Vyskúšajte to

Výkon:

 false true 

Príklad metódy Java String inter() 2

Pozrime sa ešte na jeden príklad, aby sme pochopili koncepciu interných reťazcov.

rozdiel medzi líškou a vlkom

Názov súboru: 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 } } 
Vyskúšajte to

Výkon:

 true false true false true false 

Body na zapamätanie

V súvislosti s metódou intern() je potrebné pamätať na niekoľko dôležitých bodov:

podreťazec java

1) Reťazový literál vždy vyvolá metódu intern() bez ohľadu na to, či spomeniete metódu intern() spolu s reťazcovým literálom alebo nie. Napríklad,

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

2) Kedykoľvek vytvoríme objekt String pomocou Nový kľúčového slova sa vytvoria dva objekty. Napríklad,

 String str = new ('Hello World'); 

Tu sa vytvorí jeden objekt v pamäti haldy mimo SCP kvôli použitiu nového kľúčového slova. Keďže máme aj reťazcový doslov ('Ahoj svet'); preto sa vo vnútri SCP vytvorí jeden objekt za predpokladu, že doslovné „Ahoj svet“ už v SCP nie je.