logo

Java String intern()

The Třída Java String internovat() metoda vrací vložený řetězec. Vrací kanonickou reprezentaci řetězce.

abstrakce v Javě

Lze jej použít k vrácení řetězce z paměti, pokud je vytvořen novým klíčovým slovem. Vytvoří přesnou kopii objektu řetězce haldy ve fondu konstant řetězců.

Podpis

Podpis metody intern() je uveden níže:

 public String intern() 

Návraty

internovaný řetězec

Potřeba a fungování metody String.intern().

Když je řetězec vytvořen v Javě, zabírá paměť v haldě. Také víme, že třída String je neměnná. Proto kdykoli vytvoříme řetězec pomocí klíčového slova new, je v haldě přidělena nová paměť pro odpovídající řetězec, který je bez ohledu na obsah pole. Zvažte následující fragment kódu.

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

Příkaz println vypíše hodnotu false, protože každému řetězcovému literálu je přidělena samostatná paměť. V paměti se tak vytvoří dva nové objekty typu string, tj. str a str1. která má různé reference.

seznam řazení java

Víme, že vytvoření objektu je v Javě nákladná operace. Kvůli úspoře času proto vývojáři Javy přišli s konceptem String Constant Pool (SCP). SCP je oblast uvnitř paměti haldy. Obsahuje jedinečné řetězce. Aby bylo možné vložit řetězce do fondu řetězců, je třeba zavolat internovat() metoda. Před vytvořením objektu ve fondu řetězců JVM zkontroluje, zda je řetězec již ve fondu přítomen nebo ne. Pokud je řetězec přítomen, je vrácena jeho reference.

 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 

Ve výše uvedeném úryvku kódu je metoda intern() vyvolána na objektech String. Proto je paměť alokována v SCP. Pro druhý příkaz není vytvořen žádný nový objekt typu string, protože obsah str a str1 je stejný. Proto je pro str1 vrácen odkaz na objekt vytvořený v prvním příkazu. Str a str1 tedy oba ukazují na stejnou paměť. Proto se tiskové prohlášení vytiskne jako pravdivé.

Příklad metody Java String inter()

Název souboru: 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 }} 
Otestujte to hned

Výstup:

 false true 

Příklad metody Java String inter() 2

Podívejme se ještě na jeden příklad, abychom porozuměli konceptu string intern.

Název souboru: InternExample2.java

ostrý úhel
 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 } } 
Otestujte to hned

Výstup:

 true false true false true false 

Body k zapamatování

Níže jsou uvedeny některé důležité body, které je třeba pamatovat ohledně metody intern():

1) Řetězcový literál vždy vyvolá metodu intern() bez ohledu na to, zda spolu s řetězcovým literálem zmíníte metodu intern() nebo ne. Například,

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

2) Kdykoli vytvoříme objekt String pomocí Nový klíčové slovo, jsou vytvořeny dva objekty. Například,

designový vzor java
 String str = new ('Hello World'); 

Zde je vytvořen jeden objekt v paměti haldy mimo SCP kvůli použití nového klíčového slova. Jak jsme dostali řetězcový doslovný ('Hello World'); proto je uvnitř SCP vytvořen jeden objekt za předpokladu, že doslovné „Ahoj světe“ již v SCP není přítomno.