new String("abc")创建了多少个对象?

在 Java 中,使用 new String("abc") 可能创建 1 个或 2 个对象,具体取决于字符串常量池(String Pool)中是否已存在 “abc” 这个字符串:

  1. 如果常量池中不存在 “abc”:
  • 会先在常量池中创建一个 “abc” 对象。
  • 再通过 new 关键字在堆内存中创建一个新的 String 对象(该对象的值与常量池中的 “abc” 相同)。
  • 总共创建 2 个对象
  1. 如果常量池中已存在 “abc”
  • 仅通过 new 关键字在堆内存中创建一个新的 String 对象(该对象的值引用常量池中的 “abc”)。
  • 总共创建 1 个对象

这是因为 new String("abc")会强制在堆中生成一个新对象,而直接使用字符串字面量(如"abc")则会优先复用常量池中的已有对象。