Conan
Conan
发布于 2023-12-29 / 46 阅读
0
0

String s = new String("1")创建了几个对象

String s = new String("1");
  1. 常量池对象:中会查看是否有已经是 "1" 的字符串常量,如果没有,那么会在常量池中创建它。这个 "1" 就是在方法区的字符串常量池中创建的一个对象。存放于方法区

  2. 堆上对象: 即 new String("1")。这是一个新创建的 String 对象,存放在堆空间上。这个新对象内部有一个变量指向了在字符串常量池中的 "1"。存放于堆

  3. 引用变量:即 String s。这是在栈上创建的一个引用变量,它存储的是 new String("1") 这个 String 对象在堆上的地址。存放于栈

所以这条语句,会创建1-2个对象,和一个引用;

  1. new String("1") 创建了一个新的 String 对象在堆内存中,这个对象内部有一个指针指向字符串常量池中的 "1"。

  2. String s 创建了一个引用变量 s 在栈内存中,这个引用变量指向在堆上新创建的 String 对象。

所以,实际上有两个指向操作:

  • String 对象指向它的值,即字符串常量池中的 "1"。

  • 引用变量 s 指向这个String 对象。


评论