Подтвердить что ты не робот

Можем ли мы получить доступ или запросить статический (постоянный) пул Java String?

Есть ли способ получить доступ к содержимому пула констант String в нашей собственной программе?

Скажем, у меня есть базовый код, который делает это:

String str1 = "foo";
String str2 = "bar";

Теперь в нашем постоянном пуле строк есть 2 строки. Есть ли способ получить доступ к пулу и распечатать приведенные выше значения или получить текущее общее количество элементов, которые в настоящее время содержатся в пуле?

то есть.

StringConstantPool pool = new StringConstantPool();
System.out.println(pool.getSize()); // etc
4b9b3361

Ответ 1

Вы не можете напрямую получить доступ к String intern pool.

По Javadocs String intern pool есть:

Пул строк, первоначально пустой, поддерживается конфиденциально по class String.

Однако объекты String могут быть добавлены в этот пул с помощью метода String intern().

java.lang.String.intern() возвращает интернированную строку, то есть та, которая имеет запись в глобальном пуле строк. Если String еще не находится в глобальном пуле String, он будет добавлен.

Программно, вы можете следовать этому подходу:

  • Объявить Set<String> StringConstantPool = new HashSet<String>();
  • вызов String.intern()
  • Добавить возвращаемое значение String в этот пул StringConstantPool