访问了哪个字符串对象?

时间:2015-07-14 05:20:06

标签: java string

我们知道当我们按照这样的新关键字创建新的String对象时:

String str = new String("New String Will Have Two Objects");

它将创建两个对象,一个在Java堆内存上,另一个在String池上。

那么当我们调用access "str"访问哪个字符串对象时(堆对象或字符串池对象)?

根据我的理解,可以访问字符串池对象,如果是,那么堆对象会发生什么?

3 个答案:

答案 0 :(得分:7)

如果要使用new

创建String对象
String str = new String("New String Will Have Two Objects");

在这种情况下,JVM将在普通(非池)堆内存中创建一个新的字符串对象,文字"New String Will Have Two Objects"将放在字符串常量池中。变量str将引用堆中的对象(非池)。

方法'intern()'用法

  

这是java docs

最好的描述

当调用intern方法时,如果池已经包含一个等于此String对象的字符串(由equals(Object)方法确定),则返回池中的字符串。否则,将此String对象添加到池中,并返回对此String对象的引用。

String str = new String("New String Will Have Two Objects");

str.intern();

答案 1 :(得分:0)

new String在堆上创建一个新字符串。此字符串的引用将分配给str

答案 2 :(得分:0)

字符串文字始终从字符串文字池中引用它们。这意味着他们总是引用它们,因此不符合垃圾收集http://www.javaranch.com/journal/200409/ScjpTipLine-StringsLiterally.html

的条件