使用分析器,我似乎看到了Apple的1.6 Java:
我从一个中等长度的Java字符串开始。我使用String.split("\\W+")
将其拆分为令牌。然后代码保存对一些拆分的引用。
看来,如果我相信我的眼睛在你的套件中,那么Java有助于不复制这些字符串,所以我实际上持有对冗长原件的引用。在我看来,这会导致相当大的空间浪费。
这看起来似乎有道理吗?很容易添加一个循环来制作这些人的副本。
答案 0 :(得分:4)
String.split()
不会复制String
[新对象...]的部分,而是使用String
的字段:offset
和{{ 1}}。通过“更改”它们,稍后您访问count
对象时,可以通过将偏移量添加到原始引用来完成。这样做确实是为了防止复制整个String
,并节省空间[好吧,至少通常......]。
所以基本上是的。您的所有新对象都会在原始String
中使用相同的char[]
引用,这将引用原始char[]
。