字符串缓冲区声明不足

时间:2015-07-30 10:06:13

标签: java

我使用工具来检查编码风格 我得到了很多建议:

  

StringBuffer构造函数初始化为16,但附加了至少35个字符。

以下是我的一些代码:

final StringBuffer Contents = new StringBuffer();

为什么会发生这种情况? 怎么算35 characters
如何编辑StringBuffer的大小?
或者我应该用什么方法来解决这个问题?

3 个答案:

答案 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)

来自docs of StringBuffer

  

在任何时间点它都包含一些特定的字符序列,但序列的长度和内容可以通过某些方法调用来改变。

如果您知道手头的长度,请使用constructor指定长度。如果你想增加你的缓冲区,你可以在任何时间点做。

 contents.setLength(i);

作为旁注,变量名称以小写字母开头。已将Contents更改为contents

答案 2 :(得分:0)

  

为什么会发生这种情况?

你的意思是,你为什么会收到这条消息?

最有可能的,因为它说的是真的!!也就是说:此声明之后的代码会向StringBuffer添加至少35个字符。

  

它是如何计算35个字符的?

呃...通过数数计算。

它已经分析了声明后面的代码,并计算了无条件地append编辑到缓冲区的所有字符和字符串文字的长度。

  

如何编辑StringBuffer的大小?

您可以创建一个StringBuffer,其空间至少为35个字符,如下所示:

  new StringBuffer(35);

然而,这可能不是最合适的解决方案。消息的暗示是,分配一个足够大的缓冲区,而不是创建太小的缓冲区,并让缓冲区增长它是更有效的。但是,当电流容量不足时,缓冲扩展器通过扩展到大致加倍所需的容量来工作。因此,如果您将容量设置为35个字符但需要48个字符,则扩展器可能会将缓冲区扩展为70或80.

实际上,如果缓冲区空间的实际数量通常适合小范围的值,则容量的最佳选择可能是大于该范围上限的几个字符。容量太小或太大的容量将不是最理想的。

顺便说一句,除非缓冲区由多个线程共享,否则最好使用StringBuilder而不是StringBuffer