new String()到底创建了几个对象?看这一篇就够了

经典面试题

String s = new String(“ab”)会创建几个对象?

相信大家肯定都被问到过这个问题,相信大家也都知道答案,对是两个,是哪两个呢? 为什么是两个呢?

哪两个?

1.new关键字在堆空间分配一块空间存放new的对象
2.在常量池中放置"ab"(前提是字符串常量池中不存在"ab")

为什么是两个?(证明)

要想了解为什么最直接的就是字节码,下面我们看一下
字节码图
一目了然,第一行一个new关键字创建了一个,第三行ldc是将"ab"放置在字符常量池中,所以是两个。
如果代码写成这样
在这里插入图片描述
再看一下字节码
在这里插入图片描述
此时则是创建了一个对象,也就是new关键字创建的存放在堆空间中.
"ab"字符串是在第一行ldc到字符创常量池中的,所以当new String(“ab”)此时的"ab"就是直接从字符串常量池中直接获取的。

延伸面试题

String str = new String(“a”)+new String(“b”)创建了几个对象?

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值