Автор оригинала: Pankaj Kumar.
Java String intern () – это собственный метод. Когда метод intern() вызывается для строкового объекта, если в Пуле строк уже есть строка с тем же значением, возвращается ссылка на строку из Пула. В противном случае этот строковый объект добавляется в пул и возвращается ссылка.
Стажер строки Java()
Давайте попробуем понять метод intern() с помощью простой программы.
package com.journaldev.string; public class StringIntern { public static void main(String args[]) { String s1 = new String("abc"); // goes to Heap Memory, like other objects String s2 = "abc"; // goes to String Pool String s3 = "abc"; // again, goes to String Pool // Let's check out above theories by checking references System.out.println("s1==s2? " + (s1 == s2)); // should be false System.out.println("s2==s3? " + (s2 == s3)); // should be true // Let's call intern() method on s1 now s1 = s1.intern(); // this should return the String with same value, BUT from String Pool // Let's run the test again System.out.println("s1==s2? " + (s1 == s2)); // should be true now } }
Выход:
s1==s2? false s2==s3? true s1==s2? true
Объяснение примера String intern()
- Когда мы используем
новый
оператор, строка создается в пространстве кучи . Таким образом, объект “s1” создается в памяти кучи со значением “abc”. - Когда мы создаем строковый литерал, он создается в пуле строк. Таким образом, “s2” и “s3” относятся к строковому объекту в пуле, имеющему значение “abc”.
- В первом операторе печати s1 и s2 ссылаются на разные объекты. Следовательно, возвращается
false
. - Во втором операторе печати s2 и s3 ссылаются на один и тот же объект в пуле. Следовательно возвращается
true
. - Теперь, когда мы вызываем
s1.intern()
, JVM проверяет, присутствует ли в пуле какая-либо строка со значением “abc”? Поскольку в пуле есть строковый объект со значением “abc”, возвращается его ссылка. - Обратите внимание , что мы вызываем
s1.intern ()
, поэтому s1 теперь ссылается на объект пула строк со значением “abc”. - На данный момент все три строковых объекта ссылаются на один и тот же объект в пуле строк. Следовательно, возвращается
true
сейчас.
Пожалуйста, посмотрите видео на YouTube ниже для большей ясности о методе стажера ().
Ссылка: API Doc