Java String intern()

The Java String клас стажант() метод връща вградения низ. Връща каноничното представяне на низ.

Може да се използва за връщане на низ от паметта, ако е създаден от нова ключова дума. Той създава точно копие на низовия обект на купчина в String Constant Pool.

Подпис

Сигнатурата на метода intern() е дадена по-долу:

 public String intern()  

Се завръща

интерниран низ

Необходимостта и работата на метода String.intern().

Когато се създаде низ в Java, той заема памет в купчината. Освен това знаем, че класът String е неизменен. Следователно, когато създаваме низ, използвайки ключовата дума new, в купчината се разпределя нова памет за съответния низ, което е независимо от съдържанието на масива. Разгледайте следния кодов фрагмент.

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

Операторът println отпечатва false, защото отделна памет е разпределена за всеки низов литерал. Така в паметта се създават два нови низови обекта, т.е. str и str1. който съдържа различни препратки.

Знаем, че създаването на обект е скъпа операция в Java. Ето защо, за да спестят време, разработчиците на Java излязоха с концепцията за String Constant Pool (SCP). SCP е област в паметта на стека. Той съдържа уникалните низове. За да поставите низовете в пула от низове, трябва да извикате стажант() метод. Преди да създаде обект в пула от низове, JVM проверява дали низът вече присъства в пула или не. Ако низът присъства, се връща неговата препратка.

 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  

В горния кодов фрагмент методът intern() се извиква върху обектите String. Следователно паметта се разпределя в SCP. За втория израз не се създава нов низов обект, тъй като съдържанието на str и str1 е едно и също. Следователно препратката към обекта, създаден в първия израз, се връща за str1. Така str и str1 сочат към една и съща памет. Следователно операторът за печат се отпечатва вярно.

Пример за метод Java String intern().

Име на файл: 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 }}  
Тествайте сега

Изход:

 false true  

Java String intern() Метод Пример 2

Нека видим още един пример, за да разберем концепцията за стажант на низ.

Име на файл: 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 } }  
Тествайте сега

Изход:

 true false true false true false  

Точки за запомняне

Следват някои важни точки, които трябва да запомните относно метода intern():

1) Низовият литерал винаги извиква метода intern(), независимо дали се споменава методът intern() заедно с низовия литерал или не. Например,

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

2) Всеки път, когато създаваме String обект, използвайки нов ключова дума, се създават два обекта. Например,

 String str = new ('Hello World');  

Тук се създава един обект в хийп паметта извън SCP поради използването на ключовата дума new. Тъй като имаме и низовия литерал ('Hello World'); следователно, един обект се създава вътре в SCP, при условие че буквалното „Hello World“ вече не присъства в SCP.