java - 声明字符串对象的混淆

标签 java string memory

<分区>

如果我将一个字符串声明为

String test=new String("testing");

String test1="testing1"

由于 String 是 JAVA 中的一个类,test1 如何在不使用 new 运算符的情况下成为字符串对象。此外,当使用新运算符时,内存会分配给 new String("testing") 所以在 test1 的情况下如何分配的内存? 另外,当字符串被实习时,如果两个字符串具有相同的值,字符串存储在字符串实习池中的引用是什么?

最佳答案

让我们首先考虑这个 String test=new String("testing");

  • 它在堆中创建一个字符串对象。不在字符串池中检查该字符串是否存在于池中。

现在这个 String test1="testing1"

  • 它在字符串池而不是堆中创建一个字符串对象。在创建之前检查这个字符串是否已经在池中。如果是,则返回它的引用,否则在池中创建一个新的字符串,它的引用是返回。基本上这是一个 String Literal,它被放入常量池中用于内存优化和可重用性。

intern(): 当您使用 new() 构造一个对象并在该对象上调用 intern() 时使用它,然后首先在 Stirng 池中完成检查是否该字符串已经存在or not,yes直接使用

关于java - 声明字符串对象的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18172310/

相关文章:

vb.net - 生成随机字符串

c++ - 判断指针是否有效

java - 如何从 JRuby 调用 Java 嵌套抽象类的方法?

java - Realm 对象上的 RealmProxy 错误

java - JAXB 注释 - 如何使 XmlIDRef 元素列表具有 id 值作为属性而不是元素正文?

java axis Web服务客户端在多个服务上setMaintainSession(cookie?)

c# - 加入智能分离器

c - 表达式 ( arr[i+1] - arr[i] ) 如何产生与索引差相同的十进制数?

c++ - 我想确定动态链接库使用了多少内存

ios - ios iPhone模拟器是否导致内存使用分析膨胀?