java中创建并初始化一个String对象,最常见的方式有两种:
String str=new String("XXX");
String str="XXX";
前者是每一次new一个新对象,都会从堆内存中重新生成一个新的对象
后者则会在栈中创建一个对象引用变量str,然后 查看字符串池中是否存在"XXX",如果没有,则将"XXX"存放字符串池,并令引用变量str指向它;如果已经有"XXX",则直接令str指向它
输出结果:
true
false
ps:
方法区
-
静态区,跟堆一样,被所有的线程共享
-
方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量
-
string 默认修饰符中有static和final 所以字符串常量池在方法区中