Java String pool – 如何在堆上存储字符串
参见英文答案 >
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中存储了两个字符串: >你好世界 这些字符串是如何存储在堆上的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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |