关于字符串的疑问

讨论 未结 3 43
7911364440
7911364440 会员 2022年9月29日 09:17 发表
<p>字符串有两种创建方式:</p> <pre><code class="language-java">String str = "abc"; </code></pre> <pre><code class="language-java">String str = new String("abc"); </code></pre> <p>第一种创建方式 JVM 会判断字符串常量池中是否包含该对象,如果有则返回常量池中对象的引用,如果没有则在常量池中创建一个新对象。</p> <p>第二种创建方式在类加载阶段会将"abc"保存在 class 常量池中,调用 new 指令时会在堆中创建一个新的 String 对象。</p> <p>问题:第一种创建方式是否等价于<code>new String("abc").intern()</code>?</p>
收藏(0)  分享
相关标签: 灌水交流
注意:本文归作者所有,未经作者允许,不得转载
3个回复
  • AoEiuV020CN
    2022年9月29日 11:18
    等价不可能的,最后这段明显多 new 一个没用的字符串, 至于是否相等,真的在意写个==判断一下不就知道了, 研究这种东西真的有用吗,你在搞 jvm 开发的话当我没说,
    0 0
  • Hurriance
    2022年9月29日 12:17
    创建过程是一样的,只不过 intern 函数是提供用来判断字符串对象的源对象(字符串常量池对象)
    0 0
  • dcsuibian
    2022年9月29日 12:48
    不一样,new 了就代表新分配内存空间了。
    0 0