The Клас Java String інтерн() метод повертає вбудований рядок. Він повертає канонічне представлення рядка.
Його можна використовувати для повернення рядка з пам’яті, якщо він створений за допомогою нового ключового слова. Він створює точну копію об’єкта рядка купи в пулі констант рядків.
Підпис
Сигнатура методу 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 вказують на ту саму пам'ять. Отже, оператор print друкує true.
Приклад методу 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
Приклад 2 методу Java String intern().
Давайте подивимося ще на один приклад, щоб зрозуміти концепцію string intern.
Ім'я файлу: 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 } }Перевірте зараз
Вихід:
веб-сайт, як coomeet
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.