加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java String pool – 如何在堆上存储字符串

发布时间:2020-12-15 02:17:59 所属栏目:Java 来源:网络整理
导读:参见英文答案 What is the Java string pool and how is “s” different from new String(“s”)? ????????????????????????????????????5个 我们考虑下面的代码: String s1 = "Hello world"String s2 = "Hello world XXX" 我猜,这些字符串在Java String P
参见英文答案 > What is the Java string pool and how is “s” different from new String(“s”)? ????????????????????????????????????5个
我们考虑下面的代码:

String s1 = "Hello world"
String s2 = "Hello world XXX"

我猜,这些字符串在Java String Pool中存储了两个字符串:

>你好世界
> Hello world XXX

这些字符串是如何存储在堆上的String Pool的内存中的?是否存储在字符串池的特殊堆中? SP是否存在任何字符串索引,或者这些字符串是否存储在有序集合中?如果将“Hello world AAA”添加到SP中会发生什么?谢谢.

解决方法

字符串是不可变的.对于您的示例,String Pool中将有2个对象.如果你想知道创建,这里有一个非常好的帖子,简单的解释: http://www.journaldev.com/797/what-is-java-string-pool.

如果您将使用:

String s1 = "Hello World";
String s2 = "Hello World";
String s3 = "Hello WorldXXX";

然后会有2个对象,一个用于Hello World,所以s1 == s2;是真的(同一个对象),但Hello WorldXXX将是内存中的另一个对象.

在内存中存储字符串由String interning定义,这里是wiki的decsription.

对于你的评论:如果你调用operator new,它取决于那个,因为它是在堆空间中创建的(在String Pool之外).如果你在我的例子中使用它,那么它们存储在String Pool中,在那里决定,如果它已经存在于String池中,那么它们就像对象一样(String Pool中的内存相同).

也尝试检查https://en.wikipedia.org/wiki/Flyweight_pattern

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读