Рубрики
Без рубрики

Метод Java String intern() возвращает ссылку на строку из пула строк. String intern () – это собственный метод, используемый для перемещения строки из кучи в пул.

Метод Java String intern() возвращает ссылку на строку из пула строк. String intern () – это собственный метод, используемый для перемещения строки из кучи в пул.

Автор оригинала: 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()

  1. Когда мы используем новый оператор, строка создается в пространстве кучи . Таким образом, объект “s1” создается в памяти кучи со значением “abc”.
  2. Когда мы создаем строковый литерал, он создается в пуле строк. Таким образом, “s2” и “s3” относятся к строковому объекту в пуле, имеющему значение “abc”.
  3. В первом операторе печати s1 и s2 ссылаются на разные объекты. Следовательно, возвращается false .
  4. Во втором операторе печати s2 и s3 ссылаются на один и тот же объект в пуле. Следовательно возвращается true .
  5. Теперь, когда мы вызываем s1.intern() , JVM проверяет, присутствует ли в пуле какая-либо строка со значением “abc”? Поскольку в пуле есть строковый объект со значением “abc”, возвращается его ссылка.
  6. Обратите внимание , что мы вызываем s1.intern () , поэтому s1 теперь ссылается на объект пула строк со значением “abc”.
  7. На данный момент все три строковых объекта ссылаются на один и тот же объект в пуле строк. Следовательно, возвращается true сейчас.

Пожалуйста, посмотрите видео на YouTube ниже для большей ясности о методе стажера ().

Ссылка: API Doc