我们可以访问或查询Java String intern(常量)池吗?

COD*_*ACK 17 java string pool

有没有办法在我们自己的程序中访问String常量池的内容?

假设我有一些基本代码可以做到这一点:

String str1 = "foo";
String str2 = "bar";
Run Code Online (Sandbox Code Playgroud)

现在我们的String常量池中有两个字符串浮动.有没有办法访问池并打印出上述值或获取池中当前包含的当前元素总数?

StringConstantPool pool = new StringConstantPool();
System.out.println(pool.getSize()); // etc
Run Code Online (Sandbox Code Playgroud)

anu*_*ava 10

你无法直接访问String intern pool.

按照Javadocs String intern pool:

最初为空的字符串池由String类私有维护.

但是,可以使用String的intern()方法将String对象添加到此池中.

java.lang.String.intern()返回一个interned String,即在全局String池中有一个条目的String.如果String不在全局字符串池中,则将添加它.

以编程方式,您可以遵循此方法:

  1. 宣布 Set<String> StringConstantPool = new HashSet<String>();
  2. 呼叫 String.intern()
  3. 将返回的String值添加到此池中StringConstantPool

  • 从OOP的角度来看,它不仅是私有的,而且实际上是[作为本机方法实现](http://stackoverflow.com/questions/3323608/how-is-javas-stringintern-method-implemented).这意味着即使使用反射也无法访问它. (3认同)
  • 我相信通过写`最初为空'他们的意思是说当JVM加载时这个池是空的. (2认同)