Java StringBuffer的容量是多少?它的目的和效果是什么?
StringBuffer的容量是多少? 程序启动时是否需要设置容量大小?如果未设置,是否会导致程序运行缓慢? 例如,使用长度超过1000个字符的Java StringBuffer的容量是多少?它的目的和效果是什么?,java,stringbuffer,capacity,Java,Stringbuffer,Capacity,StringBuffer的容量是多少? 程序启动时是否需要设置容量大小?如果未设置,是否会导致程序运行缓慢? 例如,使用长度超过1000个字符的StringBuffer outputSource=new StringBuffer() 另一方面,设置一个相对准确的值会提高程序的计算性能吗? 我希望我的问题是清楚的。 谢谢你 任何stringbuffer都是可变的。一旦它被分配到内存,它就不会再创建任何对象 因此,如果您相对地定义了StringBuffer的任何大小,那么它对性能没有影响。您应该使用
StringBuffer outputSource=new StringBuffer()代码>
另一方面,设置一个相对准确的值会提高程序的计算性能吗?
我希望我的问题是清楚的。
谢谢你 任何stringbuffer都是可变的。一旦它被分配到内存,它就不会再创建任何对象
因此,如果您相对地定义了StringBuffer的任何大小,那么它对性能没有影响。您应该使用较新的StringBuilder
类。本质上是一样的,但没有同步
如果您事先知道大致的大小,那么为StringBuilder
分配足够的容量会更有效。这样,在操作过程中不需要调整自身大小
请注意,除非您使用多个操作来创建长字符串,否则它不会真正影响性能。例如,定义容量可能有用的情况是创建一个10000个字符的字符串,每次追加10个字符。它需要1000个追加调用,并且可能需要多次调整内部char[]
的大小
但是,如果要创建一个包含10000个字符和2个附录的字符串,则可能只会得到2个大小调整。这不太可能是性能方面的问题。
每个字符串缓冲区都有一个容量。只要长度
字符串缓冲区中包含的字符序列不超过
容量,则无需分配新的内部缓冲区阵列。
如果内部缓冲区溢出,它会自动变大。像
在JDK5发行版中,这个类已经补充了一个等价的类
类设计用于单个线程StringBuilder。这个
通常应优先使用StringBuilder类
第一,因为它支持所有相同的操作,但是它更快,因为
不执行同步
一些重要的收获
如果缓冲区的容量溢出,则需要分配更多内存,这将对性能产生一定影响,具体取决于StringBuffer
的使用方式
基本上,StringBuffer
的容量与分配给程序的内存相同
如果不是多线程,则使用StringBuilder
StringBuffer
是线程安全的。因此,当它有大量的if数据时,运行速度会变慢。使用StringBuilder
代替单线程应用程序。与StringBuffer
相比,它的访问速度更快。但是StringBuilder
不是线程安全的因为字符串是不可变的(不能更改),连接可能会非常耗时和占用内存,因为每次连接时,旧版本加上需要追加的字符串都被创建为新变量,而旧变量仍在堆上
StringBuilder包含一个内部缓冲区,因此只需要复制要追加的字符串
如果StringBuilder空间不足,它会将其缓冲区加倍(在这种情况下,需要复制整个字符串)。为什么缓冲区会加倍,而不仅仅是扩展到与旧字符串的大小+附加字符串的大小相匹配的大小,原因是在这种情况下,必须再次复制字符串。因此它加倍了
也可以在StringBuilder的构造函数中提供最终的缓冲区大小,只有在您已经知道StringBuilder中会有多少缓冲区时才有意义
希望这有帮助您应该更喜欢使用StringBuffer
类
StringBuffer类是一个可变类,而String类是不可变的。StringBuffer类的容量和字符串。StringBuffer可以动态更改。当涉及大量修改字符串(追加、插入、删除、修改等)时,首选字符串缓冲区
StringBuffere类中有类似于capacity()
和ensureCapacity()
的函数
capacity():返回字符串缓冲区的当前容量。
ensureCapacity():此方法确保字符串缓冲区的最小容量。
您可以通过以下链接了解StringBuffer的简介: