java 1.6中的子串和垃圾

时间:2011-10-02 21:05:19

标签: java

使用分析器,我似乎看到了Apple的1.6 Java:

我从一个中等长度的Java字符串开始。我使用String.split("\\W+")将其拆分为令牌。然后代码保存对一些拆分的引用。

看来,如果我相信我的眼睛在你的套件中,那么Java有助于复制这些字符串,所以我实际上持有对冗长原件的引用。在我看来,这会导致相当大的空间浪费。

这看起来似乎有道理吗?很容易添加一个循环来制作这些人的副本。

1 个答案:

答案 0 :(得分:4)

String.split()不会复制String [新对象...]的部分,而是使用String的字段:offset和{{ 1}}。通过“更改”它们,稍后您访问count对象时,可以通过将偏移量添加到原始引用来完成。这样做确实是为了防止复制整个String,并节省空间[好吧,至少通常......]。
所以基本上是的。您的所有新对象都会在原始String中使用相同的char[]引用,这将引用原始char[]