Appearance
new String("a")会创建两个对象:
- 一个是在字符串常量池中的
"a"(如果之前没有创建过)。 - 一个是在堆中的
new String("a")。
new String("b")同样会创建两个对象:
- 一个是在字符串常量池中的
"b"(如果之前没有创建过)。 - 一个是在堆中的
new String("b")。
new String("a") + new String("b")实际上是用StringBuilder进行拼接,然后调用toString()方法:
- 一个
StringBuilder对象。 StringBuilder的append方法调用后,会在堆中创建一个包含"ab"的新String对象。
所以,综合以上分析,总共有以下几个对象被创建:
- 字符串常量池中的
"a"(如果之前没有创建过)。 - 字符串常量池中的
"b"(如果之前没有创建过)。 - 堆中的
new String("a")。 - 堆中的
new String("b")。 - 一个
StringBuilder对象。 StringBuilder在拼接"a"和"b"后在堆中创建的一个新的String("ab")对象。
总结:总共会创建 6 个对象(假设 "a" 和 "b" 在常量池中之前没有被创建过)。
