我们知道当我们用new关键字创建新的String对象时,如下所示:
String str = new String("New String Will Have Two Objects");
Run Code Online (Sandbox Code Playgroud)
它将创建两个对象,一个在java堆内存上,另一个在String池上.
那么当我们调用访问"str"哪个字符串对象被访问时(堆对象或字符串池对象)?
根据我的理解,可以访问字符串池对象,如果是,那么堆对象会发生什么?
如果要使用创建String对象 new
String str = new String("New String Will Have Two Objects");
Run Code Online (Sandbox Code Playgroud)
在这种情况下,JVM将在普通(非池)堆内存中创建一个新的字符串对象,文字"New String Will Have Two Objects"将放在字符串常量池中.该变量str将引用堆中的对象(非池).
方法'intern()'用法
这是java docs最好的描述
调用实习方法时,如果池已经包含等于此字符串对象的字符串(由equals(Object)方法确定),则返回池中的字符串.否则,将此String对象添加到池中,并返回对此String对象的引用.
String str = new String("New String Will Have Two Objects");
str.intern();
Run Code Online (Sandbox Code Playgroud)