我在某处读到Java StringBuilder使用大约1 mb的500个字符。这是真的,如果是这样,是不是有点极端? StringBuilder是用这么多内存做一些令人难以置信的事吗?是什么原因,这是否意味着我不应该过多地使用这个课程?
答案 0 :(得分:13)
不,这完全是垃圾 - 当然,除非你创建一个具有巨大容量的StringBuilder。
Java通常每个字符使用2个字节。 String和StringBuilder的长度和数组本身有一点开销,但不是很多。
现在500个字符的1K是正确的...我怀疑这是混乱的原因。 (要么你听错了,要么和你说话的人正在重复一些他们听错了。)
答案 1 :(得分:2)
我见过两种情况,其中StringBuilder倾向于使用大量内存:
所以在第二种情况下,如果某些使用SB的代码在其中存储了一个非常大的字符串,那么StringBuilder可能会占用1Mb的内存。那是因为它只会增长但不会缩小其内部字符数组。
这两种情况都可以(而且应该)容易避免。
答案 2 :(得分:0)
此信息有误,您还记得这些信息的来源是什么吗?如果是这样,你应该纠正它。 Java通常每个字符使用2个字节。
答案 3 :(得分:0)
由于重新分配倍增,500个字符的2K也是正确的,但不是更多。这是similar question。
答案 4 :(得分:0)
我认为StringBuilder是最好的选择。它也更快,更安全。这取决于场景。如果你有不经常更改的字符串文字,那么我会说String是一个更好的选择,因为它是不可变的,否则StringBuilder就在那里。现在,对于你正在谈论的空间,我还没有听说过任何地方。