我使用工具来检查编码风格 我得到了很多建议:
StringBuffer构造函数初始化为16,但附加了至少35个字符。
以下是我的一些代码:
final StringBuffer Contents = new StringBuffer();
为什么会发生这种情况?
怎么算35 characters
?
如何编辑StringBuffer的大小?
或者我应该用什么方法来解决这个问题?
答案 0 :(得分:5)
创建StringBuffer
后的容量比使用预期所需容量创建容量更为昂贵。
使用此构造函数删除此警告:
/**
* Constructs a string buffer with no characters in it and
* the specified initial capacity.
*
* @param capacity the initial capacity.
* @exception NegativeArraySizeException if the <code>capacity</code>
* argument is less than <code>0</code>.
*/
public StringBuffer(int capacity) {
super(capacity);
}
答案 1 :(得分:0)
在任何时间点它都包含一些特定的字符序列,但序列的长度和内容可以通过某些方法调用来改变。
如果您知道手头的长度,请使用constructor指定长度。如果你想增加你的缓冲区,你可以在任何时间点做。
contents.setLength(i);
作为旁注,变量名称以小写字母开头。已将Contents
更改为contents
。
答案 2 :(得分:0)
为什么会发生这种情况?
你的意思是,你为什么会收到这条消息?
最有可能的,因为它说的是真的!!也就是说:此声明之后的代码会向StringBuffer
添加至少35个字符。
它是如何计算35个字符的?
呃...通过数数计算。
它已经分析了声明后面的代码,并计算了无条件地append
编辑到缓冲区的所有字符和字符串文字的长度。
如何编辑StringBuffer的大小?
您可以创建一个StringBuffer
,其空间至少为35个字符,如下所示:
new StringBuffer(35);
然而,这可能不是最合适的解决方案。消息的暗示是,分配一个足够大的缓冲区,而不是创建太小的缓冲区,并让缓冲区增长它是更有效的。但是,当电流容量不足时,缓冲扩展器通过扩展到大致加倍所需的容量来工作。因此,如果您将容量设置为35个字符但需要48个字符,则扩展器可能会将缓冲区扩展为70或80.
实际上,如果缓冲区空间的实际数量通常适合小范围的值,则容量的最佳选择可能是大于该范围上限的几个字符。容量太小或太大的容量将不是最理想的。
顺便说一句,除非缓冲区由多个线程共享,否则最好使用StringBuilder
而不是StringBuffer
。