new 和“”最后都指向了常量池的同一个空间吗
来源:1-4 请介绍String字符串的存储原理
慕莱坞0247484
2022-05-30 17:33:13
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"在常量池中的地址。
祝学习愉快~
慕莱坞0247484
提问者
2022-05-30
我的意思 栈里new 出来的内存地址最后也指向常量池里的“abc”吗
相似问题