有没有办法检查一个字符串是否已经存在于字符串常量池中?
与之相关的问题可能是:
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/