aboutJava

new String("ab")到底创建了几个对象?

之前一直被这个问题困扰,网上一些描述的都不是很清楚,自己看了一些资料可算搞清楚了,那就在博客上记录一下吧!

String str = new String("ab");

答案是2个

第一个是在堆中开辟了一块空间,存放String对象。

第二个是在字符串常量池中放入了一个"ab"

可通过其字节码证明。

字节码解释如下:

 0 new #2 <java/lang/String>
这一步在heap中创建了一个String类型的对象。

 3 dup
复制栈顶的值

 4 ldc #3 <ab>
将这个值"ab" push到常量池中

 6 invokespecial #4 <java/lang/String.<init>>
调用实例方法init

 9 astore_1
将引用存储到本地变量表的1索引处

10 return

那么再探讨下new String("a") + new String("b")创建了几个对象?

String str = new String("a") + new String("b");

查看code字节码

由字节码可以看出,可以说有5个对象,分别是:

1、new StringBuilder()

2、堆中的new String("a")

3、常量池中的对象"a"

4、堆中的new String("b")

5、常量池中的对象"b"

  如果更深入来说,StringBuilder的toString方法中调用了new String()。也可以算一个。但并未在常量池中生成"ab";

相关文章:

  • 2021-07-11
  • 2022-01-02
  • 2021-12-04
  • 2021-08-16
  • 2021-07-13
  • 2021-10-27
猜你喜欢
  • 2021-05-01
  • 2021-12-26
  • 2021-09-12
  • 2021-09-15
  • 2021-08-18
  • 2021-08-26
  • 2021-07-28
相关资源
相似解决方案