String s= new string(“xxx”);创建了几个String对象?
这道题想考察什么 ?
这个问题旨在考察对于 Java 中字符串 String 的理解。
考察的知识点
Java基础,JM常量池与对象内存分配
考生应该如何回答
首先让我们来分析代码 String s = new String("xxx")。
其中包含关键字 new,我们都知道此关键字new是创建类的实例对象。
在 Java 虚拟机(JVM)的运行期间,执行 new 指令会在堆内存中创建一个新的 String 对象。
其次,在String的构造方法中传递了"xxx"字符串,这个"xxx"是一个字符串常量。
JVM 首先会尝试从字符串常量池中获取 "xxx" 对应的引用。
如果常量池中不存在该字符串,则会在堆内存中创建一个新的字符串对象,并将其引用保存到字符串常量池中,然后返回该引用。
因此:
- 如果常量池中不存在字符串常量
xxx,那么会创建两个String对象; - 如果常量池中已经存在字符串常量
xxx,则只会创建一个String对象。<