浅谈Java字符串常量池
JDK1.7后,字符串常量池在堆中
字符串常量池 是 JVM 为了提升性能和减少内存消耗针对字符串(String 类)专门开辟的一块区域,主要目的是为了避免字符串的重复创建。
🍓字符串常量池保存的是:字符串(key)和 字符串对象的引用(value)的映射关系(维护了一个HashMap),字符串对象的引用指向堆中的字符串对象。
因此如果在常量池中找不到某字符串,会在堆中创建以该字符串生成的String对象,再将其地址存储到常量池HashMap的Value中!
至此,常量池中增加了一个字符串常量。
因此面对问题:String s1 = new String("abc");创建了几个String对象?
---首选为s1创建一个空的String对象,
-
如果常量池中没有“abc”,那么需要在堆中创建一个存储了“abc”的String对象,将该对象的引用存入常量池,再为 为s1创建的对象 赋值,因此创建了2个String对象
-
如果常量池中有“abc”,那么直接为 为s1创建的对象 赋值即可,只创建了一个String对象。
敬请指正!
我的个人博客:donn的博客 - 学习欢迎访问donn的博客!https://tangjiayang.github.io/