new String(“ab”)会创建几个对象?
相信大部分同学对于String可以说是既熟悉又陌生, 熟悉的是我们每天的代码都离不开String, 陌生的是每当同学们看到String相关的面试题第一眼会认为很简单 , 但是往往对答案的时候却是大失所望 ,接下来让我们熟悉下String
* new String("ab") 会创建几个对象?
* * @author: zzp
* @create: 2022
*/
public class StringNewTest {
public static void main(String[] args) {
String str = new String("ab");
}
}
我们转换成字节码来查看
这里面通过字节码能够很清楚的看到就是两个对象
- 一个对象是:new关键字在堆空间中创建的
- 另一个对象:字符串常量池中的对象"ab"。 字节码指令:ldc
new String(“a”) + new String(“b”) 会创建几个对象?
/**
* @author: zzp
* @create: 2022
*/
public class StringNewTest {
public static void main(String[] args) {
String str = new String("a") + new String("b");
}
}
字节码文件为:
字节码显示创建了6个对象
- 对象1:new StringBuilder()
- 对象2: new String(“a”)
- 对象3: 常量池中的"a"
- 对象4: new String(“b”)
- 对象5: 常量池中的"b"
深入剖析: StringBuilder的toString():
- 对象6 :new String(“ab”)
强调一下,toString()的调用,在字符串常量池中,没有生成"ab"