有没有办法检查字符串常量池中是否已有字符串?
相关的问题可能是:
String s = "Hello" + "World";
在此语句的常量池中将创建多少个字符串:1或3?
根据javap命令“javap -c -verbose”我可以打印Constatnt池表并检查创建的String常量。我发现只为String s =“Hello”+“World”创建了1个String;声明。有没有办法以编程方式知道String Constant Pool的内容。
以下代码:
String s = "0";
for (int i = 1; i < 10; i++) {
s = s + i;
}
我知道将会创建总共10个String对象,只有最后一个“0123456789”将由s引用。其他人将没有任何参考。如何查看或检查这些字符串是否存在,例如字符串常量池中的“01”?
答案 0 :(得分:1)
您无法直接访问String intern池。
根据http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#intern%28%29字符串实习池是:
字符串池(最初为空)由String类维护privately
。
但是可以使用String的intern()
方法将String对象添加到此池中。
java.lang.String.intern()
返回一个interned String,即在全局String池中有一个条目的String。如果String不在全局字符串池中,则将添加它。
以编程方式,您可以遵循以下方法:
1.Declare Set StringConstantPool = new HashSet();
2.call String.intern()
3.将返回的String值添加到此池StringConstantPool
中只有一个字符串将在常量池中创建HelloWord