经典面试题
String s = new String(“ab”)会创建几个对象?
相信大家肯定都被问到过这个问题,相信大家也都知道答案,对是两个,是哪两个呢? 为什么是两个呢?
哪两个?
1.new关键字在堆空间分配一块空间存放new的对象
2.在常量池中放置"ab"(前提是字符串常量池中不存在"ab")
为什么是两个?(证明)
要想了解为什么最直接的就是字节码,下面我们看一下
一目了然,第一行一个new关键字创建了一个,第三行ldc是将"ab"放置在字符常量池中,所以是两个。
如果代码写成这样
再看一下字节码
此时则是创建了一个对象,也就是new关键字创建的存放在堆空间中.
"ab"字符串是在第一行ldc到字符创常量池中的,所以当new String(“ab”)此时的"ab"就是直接从字符串常量池中直接获取的。