new 和“”最后都指向了常量池的同一个空间吗

来源:1-4 请介绍String字符串的存储原理

慕莱坞0247484

2022-05-30 17:33:13

https://img.mukewang.com/climg/62948f56099afcac07240715.jpg

写回答

2回答

好帮手慕小小

2022-05-30

同学你好,是的,指向的都是常量池中的地址。

1)String s = new String("txt");

    1.在编译期,JVM会去字符串常量池查找是否存在"txt";

    2.如果不存在,就在常量池开辟一个空间来存储"txt";

    3.如果存在,就不用开辟新的空间;

    4.在运行期,通过String的构造器在堆内存中new了一个新的空间(new Sring("txt"));

    5.然后将常量池中的"txt"对象的地址复制一份到该堆内存的空间中;

    6.在栈内存中开辟一个名为s的空间,存放堆内存中新空间的地址。

2)String s = "txt";

    1.在编译期,JVM会去字符串常量池查找是否存在"txt";

    2.如果不存在,就在常量池开辟一个空间来存储"txt",把地址赋给栈指针;

    3.如果存在,就不用开辟新的空间,直接把地址赋给栈指针;

    4.然后在栈内存中开辟一个名为s的空间,来存储"txt"在常量池中的地址。

祝学习愉快~

0

慕莱坞0247484

提问者

2022-05-30

我的意思 栈里new 出来的内存地址最后也指向常量池里的“abc”吗

0

0 学习 · 9886 问题

查看课程