2015-08-15 85 views
0

在甚至在堆栈溢出一些博客和网站,我可以看到类似的答下面的问题字符串池(字符串和StringBuffer)

String s = new String("Test"); 

将创建两个对象为文字“测试”将在池中。

那么StringBuffer如何在下面的情况下执行。

StringBuffer sb = new StringBuffer("BufferTest"); 

字面上的“BufferTest”是否也发生在池中?

如果是的话那么StringBuffer如何保存String垃圾收集?

+0

看一看这个问题,以及: - http://stackoverflow.com/questions/2909848/how-does-java-implement-flyweight-pattern-for-string-under-the-hood –

回答

0

"BufferTest"将发生在池中,因为任何String对象都会这样做。

0

字面上的“BufferTest”是否也发生在池中?

是的。

所有文字字符串在字符串池中帮助/

如果是,那么如何StringBuffer保存String垃圾收集?

它不需要。与字符串相对应的String保持可达,只要定义它的类(或类)存在/加载。

+0

但作为每下面的代码,我认为每个追加调用StringBuffer丢失第一个引用。
'StringBuffer sb = new StringBuffer();' \t \t'sb.append(“Test”);' \t \t'System.out.println(sb.toString());' \t \t \t \t sb.append(“Test1”); \t \t System.out.println(sb.toString()); – Amit

+0

就像我说过的,'StringBuffer'不需要保存对它的引用。当代码被加载时,“Test”的引用被放置在字符串池中,而不是在执行时。 –