表达式 `new String("a") + new String("b")` 会创建3个对象。让我们逐步分析这个过程:
1. 第一个对象是 `"a"` 的字符串常量,它会在字符串常量池中创建一个对象(Java中的字符串常量是不可变的)。
2. 第二个对象是 `"b"` 的字符串常量,它也会在字符串常量池中创建一个对象。
3. 使用 `new` 关键字创建的第三个对象是拼接后的字符串对象,它在堆内存中创建。`new String("a")` 和 `new String("b")` 分别创建了两个新的字符串对象,然后使用 `+` 运算符进行字符串拼接,生成一个新的字符串对象。
因此,总共创建了3个字符串对象,其中两个在字符串常量池中,一个在堆内存中。需要注意的是,通过 `new` 关键字创建的新的字符串对象可以有自己的独立内存空间,与字符串常量池中的对象不同。