作者:LookUp77 | 来源:互联网 | 2023-06-04 09:42
前言Strings1newString;Strings2“hello”;s1是字符串对象,s2和字符串常量,创建过程有何区别?字符串常量s2栈中定义一个引用变
前言strings1=newstring(「Hello”);
String s2=“hello”
s1是字符串对象。 s2和字符串常量、创建过程有什么区别?
内存分配字符串对象s1
在堆栈中定义引用变量s1,在堆中打开内存空间,并将对堆的内存空间的引用分配给s1。 “hello”是常量,它在字符串常量池中查找是否存在“hello”字符串对象,如果没有,它分配用于存储hello的空间,并将空间地址存储在堆中的new上
字符串常量s2
在堆栈中定义引用变量s2,编译器首先去字符串常量池,检查是否存在" hello ",如果不存在,则打开在常量池中存储" hello "的内存空间; 如果存在的话,就没有必要重新开辟空间。 存储在堆栈s2中的值是常量池中的“hello”的内存地址。 相当于指常数池内的“hello”。