我们可以访问或查询Java字符串实习生(常量)池吗?

我们可以访问或查询Java字符串实习生(常量)池吗?,java,string,pool,Java,String,Pool,有没有办法在我们自己的程序中访问字符串常量池的内容 假设我有一些基本的代码可以做到这一点: String str1 = "foo"; String str2 = "bar"; 现在有2个字符串在我们的字符串常量池中浮动。是否有办法访问池并打印出上述值或获取池中当前包含的元素的当前总数 i、 e 您不能直接访问字符串实习生池 根据字符串实习生池为: 最初为空的字符串池由 类字符串 但是,可以使用String的intern()方法将String对象添加到此池中 返回一个内部字符串,即在全局字符串池

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

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

String str1 = "foo";
String str2 = "bar";
现在有2个字符串在我们的字符串常量池中浮动。是否有办法访问池并打印出上述值或获取池中当前包含的元素的当前总数

i、 e


您不能直接访问
字符串实习生池

根据
字符串实习生池
为:

最初为空的字符串池由 类字符串

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

返回一个内部字符串,即在全局字符串池中有一个条目的字符串。如果该字符串不在全局字符串池中,则将添加该字符串

以编程方式您可以采用以下方法:

  • 声明
    Set StringConstantPool=new HashSet()
  • 调用
    String.intern()
  • 将返回的
    String
    值添加到此池
    StringConstantPool

  • 常量池中会有很多、更多的字符串——这些字符串来自JDK类和任何依赖项。请注意,字符串池是在类加载时填充的,而不是在运行引用字符串常量的实际代码时填充的。@MarkoTopolnik有趣的一点是,我不会假设JDK类中定义的字符串会加载到该池中。这对于任何类都是正确的,包括JDK类,一旦类本身被加载,Javadoc就错了,而且在这一点上永远自相矛盾。池“最初为空”和“所有字符串文本和常量值字符串表达式都被插入”都不可能是真的,而且字符串类负责后者也是不真实的。事实上,将其描述为实习是错误的。我认为,通过编写
    最初为空的
    ,他们的意思是,当JVM加载此池时,此池为空。从OOP的角度来看,它不仅是私有的,而且实际上是私有的。这意味着即使使用反射也无法访问它。
    
    StringConstantPool pool = new StringConstantPool();
    System.out.println(pool.getSize()); // etc