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.