new String("abc")创建了多少个对象?
在 Java 中,使用 new String("abc") 可能创建 1 个或 2 个对象,具体取决于字符串常量池(String Pool)中是否已存在 “abc” 这个字符串:
- 如果常量池中不存在 “abc”:
- 会先在常量池中创建一个 “abc” 对象。
- 再通过
new关键字在堆内存中创建一个新的 String 对象(该对象的值与常量池中的 “abc” 相同)。 - 总共创建 2 个对象。
- 如果常量池中已存在 “abc”:
- 仅通过
new关键字在堆内存中创建一个新的 String 对象(该对象的值引用常量池中的 “abc”)。 - 总共创建 1 个对象。
这是因为 new String("abc")会强制在堆中生成一个新对象,而直接使用字符串字面量(如"abc")则会优先复用常量池中的已有对象。