[转]String str1=new String("abc")到底创建了几个对象?

本文详细解析了Java中字符串池的概念及其实现原理。通过具体的代码示例,解释了使用new关键字创建字符串对象与直接赋值时引用字符串池的区别,帮助读者理解不同情况下字符串对象的创建过程。

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

Stirng str1 = new String("abc");
//这个产生了2个对象,一个是new关键字创建的new Sring();另一个是“abc”对象,abc在一个字符串池中str1这个对象指向这个串池
String str2 = "abc"; //此处没有创建新的对象,故运行到此还是2个对象,首先没new,另外它会去看字符串池中有没有相同的字符,如果有则str2直接指向abc,如果不是abc,而是xyz的话则又创建了一个对象
Stirng str3 = new String("abc");//如果不看前面的,光看这一行本身也是创建了2个对象,但abc在字符串池里已经有了,所以结合前面的就创建了1个对象new Sring();
所以总共创建了3个对象
解释下字符串池:他是一个由字符组成的一个数组就相当于char str1 =new char[]{a,b,c};
如果不是遇到新的字符串,则直接指向原来的串池,如果遇到新的字符串则创建一个新的串池,个人以为因为java基本类型中中没有String类型,所以当出现新的字符串的时候需要以上面char 类型来创建一个数组对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值