StringBuffer的容量是多少?它的目的和效果是什么?

时间:2013-11-21 10:31:16

标签: java stringbuffer capacity

StringBuffer的容量是多少? 程序启动时是否需要设置容量的大小?如果没有设置,是否导致程序运行缓慢? 例如。超过1000个长度字符使用StringBuffer outputSource = new StringBuffer(); 另一方面,设置相对准确的值应该会提高程序计算性能吗? 我希望我的问题很清楚。 谢谢高级!

6 个答案:

答案 0 :(得分:4)

您应该使用更新的StringBuilder课程。它本质上是相同的,但没有同步。

如果您事先知道大致的大小,那么分配具有足够容量的StringBuilder会更有效。这样,它就不需要在操作期间自行调整大小。

请注意,除非您使用多个操作来创建长字符串,否则它不会真正影响性能。定义容量可能有用的情况是例如创建一个10,000个字符的字符串,一次附加10个字符。这将需要1000次追加调用,并且可能需要多次调整内部char[]的大小。

但是,如果您要创建包含2个附加项的10,000个字符的字符串,则可能只会获得2个限制。这在性能方面不太可能出现问题。

答案 1 :(得分:1)

According to the JavaDoc

  

每个字符串缓冲区都有容量。只要长度了   字符串缓冲区中包含的字符序列不超过   容量,没有必要分配新的内部缓冲区数组。   如果内部缓冲区溢出,它会自动变大。如   发布JDK 5,这个类已经补充了等价物   设计用于单个线程的类,StringBuilder。该   通常应优先使用StringBuilder类   一,因为它支持所有相同的操作,但它更快,因为它   不执行同步。

一些重要的要点

如果溢出缓冲区的容量需要分配更多内存,这将对性能产生一些影响,具体取决于StringBuffer的使用方式。

基本上StringBuffer的容量与分配给您的程序的内存一样多。

如果您的多线程不使用StringBuilder

答案 2 :(得分:0)

StringBuffer 线程安全。所以当数据量很大时运行速度会变慢。而不是您的应用程序是单线程使用StringBuilder。与StringBuffer相比,它是快速访问。但StringBuilder 非线程安全

答案 3 :(得分:0)

由于字符串是不可变的(无法更改),因此连接可能非常耗费时间和内存,因为每次连接时,旧版本加上需要追加的字符串都会被创建为新变量,旧的变量仍然存在在堆上...

StringBuilder包含一个内部缓冲区,因此只需要复制要附加的字符串。

如果StringBuilder空间不足,它会将其缓冲区加倍(在这种情况下需要复制整个字符串)。缓冲区加倍的原因并不只是扩展到与旧字符串大小相匹配的大小+附加的大小是在这种情况下,字符串总是必须再次复制。因此它加倍了。

也可以在StringBuilder的构造函数中提供最终的缓冲区大小,这只有在你已经知道将在StringBuilder中有多少时才有意义

希望这有帮助

答案 4 :(得分:0)

您应该更喜欢使用StringBuffer类。

StringBuffer类是一个可变类,不像String类是不可变的。 StringBuffer类的容量和字符串。 StringBuffer可以动态更改。当涉及对字符串的大量修改(附加,插入,删除,修改等)时,首选字符串缓冲区。

StringBuffere类中有capacity()ensureCapacity()等函数。

capacity() : Returns the current capacity of the String buffer.

ensureCapacity() : this method ensures minimum capacity of the String buffer.

您可以通过以下链接了解有关StringBuffer的简要信息:

http://www.studytonight.com/java/stringbuffer-class.php

http://www.javabeginner.com/learn-java/java-stringbuffer

答案 5 :(得分:-1)

任何stringbuffer都是可变的。任何在将其分配给内存后不再创建任何其他对象的方法。

因此,如果您相对定义任何大小的strignbuffer

,它不会影响性能