当前位置: 首页 > 面试题库 >

字符串文字池如何工作

卫浩瀚
2023-03-14
问题内容
String str = new String("Hello");

通常,我在互联网上的许多文章中都读到,当我们编写上面的语句时,会创建两个对象。在堆上创建一个String对象,在Literal
Pool上创建一个字符串对象。并且堆对象还引用在Literal Pool上创建的对象。(如果我的陈述是错误的,请更正。)

请注意,以上解释是根据我阅读互联网上一些文章后的理解得出的。

所以我的问题是..有什么方法可以停止在文字池中创建字符串对象。怎么做?

[请让我知道了解此文字库的最佳链接,它是如何实现的]


问题答案:

如果我正确理解了您的问题,则您正在询问如何初始化字符串,而不将其放在字符串文字池中。只要不声明字符串文字表达式(不要在双引号中声明一系列字符),就可以避免这种情况。

// these two strings will be placed in the string literal pool
String one = "one";             
String two = new String("two");
// this third string will NOT be placed in the string literal pool
String three = new String(new char[] {'t', 'h', 'r', 'e', 'e'});


 类似资料:
  • 问题内容: 众所周知,如果不存在,则在字符串池中添加String值的方法。如果存在,它将返回该值/对象的引用。 我需要知道,当我调用此实习生方法时会做什么? 在字符串池中添加具有不同引用的“ dog”或在字符串池中添加对象引用(我认为不是这种情况)? 我试过了 我只想确保当我调用它时在字符串池中创建具有相同值的新对象?现在我有2个对象的值为“ dog”。一个直接存在于堆中,另一个存在于字符串池中?

  • 问题内容: 当我使用定义变量时,该字符串不会添加到字符串池中,对吗? 现在,当我定义另一个而不是时,我将其定义为突然。(或我的大学老师说)。这是为什么?是什么使这个字符串突然变成字符串池字符串? 问题答案: 当我用new定义一个StringBuffer变量时,该字符串没有添加到字符串池中,对吗? 创建a 根本不会创建a 。 现在,当我定义另一个StringBuffer而不是new时,我突然将其定义

  • 如这些问题中所述:问题1 在以下情况下,JVM将创建一个新的字符串对象,而不是使用字符串池中的现有对象: 然而,在阅读了下面两个类似的陈述之后,我有一个疑问。 从SCJP准备书: 当编译器遇到字符串文字时,它会检查池中是否已经存在相同的字符串。如果找到匹配项,对新文本的引用将指向现有的String,并且不会创建新的String文本对象。 来自JavaRanch: 在本例中,由于关键字“new”,我

  • 当我写下面的代码时,我遇到了一个问题 然后我运行我的代码,控制台打印这个 这让我很困惑。为什么第二次打印是真的,而第一次打印是假的??在我对String文字池的理解中,当定义一个字符串时,JVM将检查池中是否包含该字符串,如果不包含,则将该字符串放入池中。 在我的代码中,变量Hello存在于字符串池中,“Helo”和“lo”也在池中,我的问题是 如果池中存在Helo和lo串联的结果。 关于str5

  • 我的问题很简单。有什么区别-

  • 当使用关键字 new 创建字符串时,它使用采用 String 文本的构造函数创建新的 String 对象。我想知道在调用 String 构造函数之前,文本是否存储在常量池中。 我这么问的原因是,在《OCA Java SE 7程序员I认证指南》中,Mala Gupta写道: 她在第一行表示,new创建的String对象不会存储在常量池中。这很好,但不清楚的是,第一行构造函数中的字面“Summer”是