gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 10:59:26 24 4
gpt4 key购买 nike

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

与之相关的问题可能是:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com