java - Java中如何查找String常量池的内容?

标签 java string pool

有没有办法检查一个字符串是否已经存在于字符串常量池中?

与之相关的问题可能是:

String s = "Hello" + "World";

这条语句会在常量池中创建多少个字符串:1个还是3个?

根据 javap 命令“javap -c -verbose”,我可以打印 Constatnt 池表并检查创建的字符串常量。我发现只有 1 个 String 被创建为 String s = "Hello"+ "World";陈述。有没有办法以编程方式知道字符串常量池的内容。

对于下面的代码:

String s = "0";
for (int i = 1; i < 10; i++) {
    s = s + i;
}

我知道总共会创建 10 个 String 对象,只有最后一个“0123456789”会被 s​​ 引用。其他人将没有任何引用。我怎样才能看到或检查这些字符串的存在,例如字符串常量池中的“01”?

最佳答案

您不能直接访问 String 实习生池。

根据 http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#intern%28%29字符串实习生池是:

字符串池最初为空,由 String 类私密维护。

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

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

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

1.声明 Set StringConstantPool = new HashSet();

2.调用String.intern()

3.将返回的String值添加到这个池StringConstantPool中

只会在常量池中创建一个字符串HelloWord

关于java - Java中如何查找String常量池的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31906055/

相关文章:

java - 函数式编程 : How to handle exceptions in Functional Programming or what is its equivalent

java - 如何理解和使用spring fusion与eclipse IDE?

c++ - C++ 字符串类如何将一个变量转换为另一个变量?

java - 什么时候不在 Java 中使用数据库连接池?

java - javax.crypto.Cipher 的输出灵活性,re : fixed-size ByteBuffers

Python 多处理 - 将字典列表传递到池

java - 变量(函数类型)参数计数和变量返回类型

java检查文本文件是否存在而不覆盖

c - 递归 C 字符串替换

Java 将字符串和 string[] 传递给另一个类