在 Java 中执行 new String("yupi") 语句时,会创建多少个对象?请分析对象创建的具体过程。
考察说明
考查对 Java 字符串常量池和 new 关键字创建对象机制的理解。
回答思路
- 【回答框架 1】该语句会创建两个对象,分别是字符串常量池中的 "yupi" 字符串对象,以及堆中通过 new 创建的新 String 对象。
- 【回答框架 2】"yupi" 作为字面量,首次遇到时会在字符串常量池中创建一个 String 对象,后续相同的字面量直接复用该对象。
- 【回答框架 3】new String("yupi") 会在堆中创建一个新的 String 对象,该对象的值指向常量池中的 "yupi",但两者是不同的对象。
- 【回答框架 4】如果常量池中已有 "yupi",则只创建一个堆对象;否则创建两个。
- 【关键点 1】new String("yupi") 通常创建两个对象:常量池中的字面量对象和堆中的新对象。
- 【关键点 2】常量池中的对象用于缓存字符串字面量,堆中的对象是显式创建的独立实例。
- 【关键点 3】使用双引号直接赋值时,可能不创建新对象,而是引用常量池中的现有对象。
- 【易错点 1】误以为只创建一个对象,而忽略常量池中的字面量对象。
- 【易错点 2】混淆 String 对象的不可变性和常量池的复用机制,误以为 new 创建的对象与常量池对象相同。
- 【易错点 3】忽略常量池已有字面量的情况,导致对象数量判断错误。