logo

Java String intern()

A Java String osztály gyakornok() metódus a beépített karakterláncot adja vissza. A karakterlánc kanonikus ábrázolását adja vissza.

húrok felosztása c++

Használható karakterlánc visszaadására a memóriából, ha azt egy új kulcsszó hozta létre. Létrehoz egy pontos másolatot a string string objektumról a String Constant Pool-ban.

Aláírás

Az intern() metódus aláírása alább látható:

 public String intern() 

Visszatér

internált húr

A String.intern() metódus szükségessége és működése

Amikor egy karakterláncot Java nyelven hoz létre, az a kupac memóriáját foglalja el. Azt is tudjuk, hogy a String osztály megváltoztathatatlan. Ezért minden alkalommal, amikor az új kulcsszó használatával hozunk létre egy karakterláncot, új memória kerül lefoglalásra a kupacban a megfelelő karakterlánc számára, ami függetlenül a tömb tartalmától. Vegye figyelembe a következő kódrészletet.

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

A println utasítás hamis értéket ír ki, mert minden egyes karakterlánc literálhoz külön memória van lefoglalva. Így két új karakterlánc objektum jön létre a memóriában, azaz az str és az str1. amely különböző hivatkozásokat tartalmaz.

json a json példában

Tudjuk, hogy egy objektum létrehozása költséges művelet Java-ban. Ezért, hogy időt takarítsanak meg, a Java fejlesztők előálltak a String Constant Pool (SCP) koncepciójával. Az SCP egy terület a kupacmemórián belül. Ez tartalmazza az egyedi karakterláncokat. Ahhoz, hogy a karakterláncokat a karakterlánc-készletbe helyezzük, meg kell hívni a gyakornok() módszer. Mielőtt létrehozna egy objektumot a karakterlánckészletben, a JVM ellenőrzi, hogy a karakterlánc már jelen van-e a készletben. Ha a karakterlánc jelen van, akkor a hivatkozás visszaadásra kerül.

 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 

A fenti kódrészletben az intern() metódus meghívásra kerül a String objektumokon. Ezért a memória az SCP-ben van lefoglalva. A második utasításhoz nem jön létre új karakterlánc objektum, mivel az str és str1 tartalma megegyezik. Ezért az első utasításban létrehozott objektum hivatkozása az str1-hez kerül vissza. Így az str és az str1 is ugyanarra a memóriára mutat. Ezért a print utasítás igazat nyomtat.

Java String intern() módszer példa

Fájl név: 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 }} 
Tesztelje most

Kimenet:

 false true 

Java String intern() módszer 2. példa

Lássunk még egy példát a string intern fogalmának megértéséhez.

objektum egyenlőség java-ban

Fájl név: 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 } } 
Tesztelje most

Kimenet:

 true false true false true false 

Emlékeztető pontok

Az alábbiakban néhány fontos szempontot kell megjegyezni az intern() metódussal kapcsolatban:

js többsoros karakterlánc

1) A string literál mindig meghívja az intern() metódust, akár említjük az intern() metódust a string literál mellett, akár nem. Például,

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

2) Amikor létrehozunk egy String objektumot a új kulcsszó, két objektum jön létre. Például,

 String str = new ('Hello World'); 

Itt egy objektum jön létre a kupacmemóriában az SCP-n kívül az új kulcsszó használata miatt. Ahogy a string literált is megkaptuk ('Hello World'); ezért egy objektum jön létre az SCP-n belül, feltéve, hogy a szó szerinti „Hello World” már nincs jelen az SCP-ben.