String s1 = new String(“abc“);创建了几个String对象?

浅谈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/

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

seu_donn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值