Java运行时会维护一个String
Pool(String池,
String常量池,
字符串缓冲区)
String池用来存放运行时中产生的各种字符串,并且池中的字符串的内容不重复。
而一般对象不存在这个缓冲池,并且创建的对象仅仅存在于方法的堆栈区
String
s
=
"accp";
创建s之前系统会先在"池子"中查找是否已经存在这个字符串,
如果存在则直接符号该字符串的句柄
如果不存在,
系统会创建一个新"accp"字符串,
并返回句柄,
以后再有"accp"被要求创建,
系统不会创建新的,而是直接返回已经存在的字符串的句柄
String
s
=
new
String("accp");
系统不会去"池子"中查找,
直接在内存中新开辟一块空间,
初始化为"accp",并返回句柄
嗯
一个在堆中,
一个在缓冲区
new
String("accp");
要使用内存
在堆栈中进行