2009-11-10 38 views
0

我读了Java StringBuilder使用大约1 MB大约500个字符的地方。这是真的吗?如果是这样,是不是有点极端? StringBuilder是否用这些内存来做一些令人难以置信的事情?这是什么原因,这是否意味着我不应该太多地使用这个类?Java StringBuilder巨大的开销

+3

你是从哪里读的? – McDowell 2009-11-10 11:40:24

+0

当然,在互联网上的某个地方。 – 2009-11-10 14:34:27

回答

13

不,这是完全垃圾 - 除非你创建一个具有庞大容量的StringBuilder,当然。

Java通常使用每个字符2个字节。在String和StringBuilder中,长度和数组本身都有一些开销,但不是很多。

现在1K的500个字符是正确的......我怀疑这是造成混乱的原因。 (或者你听错了,或者那个跟你说话的人重复了一次他们就会误认为)。

0

这个信息是错误的,你还记得这个信息的来源是什么吗?如果是的话,你应该纠正它。 Java通常每个字符使用2个字节。

2

我看到两种情况下的StringBuilder的倾向于使用的内存大量:

  • 当StringBuilder的与一个疯狂的初始容量创建。
  • StringBuilder的人被“缓存”到“保存”对象分配时间。

因此,在第二种情况下,如果某些使用SB的代码在其中存储了一个非常大的字符串,则StringBuilder可能会消耗1Mb的内存。这是因为它只会增长,但不会缩小它的内部字符数组。

这两种情况都可以(也应该)容易避免。

0

我觉得StringBuilder是最好的选择。它也更快更安全。这取决于场景。如果你的字符串字面值不会频繁变化,那么我会说String是更好的选择,因为它是不可变的,否则StringBuilder就在那里。现在对于你正在谈论的空间,我从来没有听说过任何地方。

+0

比什么快?更安全吗?请注意,与StringBuffer相比,StringBuilder不是线程安全的。顺便说一句,这个问题已经差不多8岁了...... – Andy 2017-05-05 17:56:10

+0

比StringBuffer更快。任何其他你需要理解的东西。 – Mike 2017-05-05 18:11:06