Java中字符串池的底层机制?

Java中字符串池的底层机制?,第1张

Java中字符串池的底层机制?
  1. String s="hi"
    第一次真正发生了什么?

JVM是否像这样替换它

String s=new String("hi")
,其中创建了一个对象并将“
hi”添加到String文字池,因此从该池中获取了诸如String s1 =“ hi”之类的后续调用?

否。真正发生的是- 字符串字面 量在编译时 解析 ,并在类被 加载/初始化延迟 时进行 嵌入
添加到String常量池中)。因此,它们可用于JVM中的类。请注意,即使您在Strings常量池中有一个带有value 的String,也会在堆上
创建 另一个String并返回其引用。

"hi"``new String("hi")
__


 String s=new String("Test");  String s1="Test";

与…相同

 String s="Test";  String s1="Test";

在内存利用率和效率方面?

否,在第一种情况下,将创建2个“测试”字符串。一个将被添加到String常量池中(假设它在那里不存在),另一个将被添加到堆中。第二个可以被GCed。在第二种情况下,字符串常量池中仅存在一个字符串
文字 ,并且有2个对它的引用(

s
s1
)。

  1. 另外,如果有什么方法可以访问字符串池,例如检查程序或任何监视工具中存在多少字符串文字,占用的空间等?

我认为我们看不到String常量池的内容。我们只能根据我们的假设来 假设确认 行为。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5490024.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存