String str = new String("abc"); 创建了几个对象

本文详细解析了Java中String常量池的工作机制。当使用new String(“abc”)时,若“abc”已存在于常量池,则仅创建堆内存中的对象;若不存在,则先在常量池创建,再复制到堆内存。深入理解这一过程有助于优化内存使用和提高程序效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.如果常量池有“abc”,则直接copy到堆内存,str指向的是在堆内存创建的对象。这个时候只创建一个对象

2.如果常量池没有“abc”,则先创建新的String对象“abc”放入到常量池中,然后new String("abc")的时候,将常量池中的对象copy到堆内存,str指向的是在堆内存创建的对象。这个时候创建的是两个对象,一个是常量池里面的,一个是new String的。

 

参考:

https://blog.youkuaiyun.com/liutong1995/article/details/53379943

https://blog.youkuaiyun.com/limingchuan123456789/article/details/14150327

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值