运行时是否可以向字符串池添加字符串?

3
如果我从方法调用或StringBuilder.toString()中获取一个字符串对象,这个字符串是否会被添加到字符串池中?
字符串只在类加载期间添加到池中吗?

http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#intern() - Jeroen Vannevel
1
可能是Java字符串池的重复问题。 - Joe
@Joe 不,我想知道在运行时是否可以通过调用返回字符串的方法将字符串添加到字符串池中,以及intern是将字符串添加到字符串池中的唯一方式。这是其他SO问题没有明确涵盖的内容,因为它们只涵盖了字面值与new String()的明显情况。 - gurvinder372
2个回答

8

当我从一个方法调用或者StringBuilder.toString()中得到一个字符串对象时,这个字符串会被添加到String池中吗?

StringBuilder.toString() --> (创建并)返回一个在堆上的字符串对象(不在String常量池中)。

如果你在你的方法中使用return "hi",那么String常量池中的"hi"的引用将会被返回。

可以通过调用intern()方法在运行时将字符串添加到String常量池中。


5

您可以在String对象上调用intern()。如果该字符串对象尚未在池中,则这将将其置于池中并返回对池字符串的引用。(如果它已经在池中,则仅返回对已经存在的对象的引用)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接