StringBuffer构造函数的使用
在看《Java解惑》中的第23个问题的时候,一开始真的是没有看出来问题在哪里,所以先把书上的代码贴出来,让大家也看一下,因为书上的代码本来除了构造函数的陷阱之外还有其他的陷阱,所以我把书上的代码修改了,还只有一个构造函数方面的陷阱了。
问题代码
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
告诉你,都错了,它输出的只是ain .
知道是什么问题么,提示一下,问题就是出来StringBuffer的构造函数上面。
下面就进入问题的分析部分:
不知道大家手边有没有Java的API帮助文档,查了一下,构造方法的说明如下:
/////////////////////////////////////////////////////////////////////////////////////////
StringBuffer
public StringBuffer()
- 构造一个其中不带字符的字符串缓冲区,其初始容量为 16 个字符。
StringBuffer
public StringBuffer(int capacity)
- 构造一个不带字符,但具有指定初始容量的字符串缓冲区。
- 参数:
capacity
- 初始容量。- 抛出:
NegativeArraySizeException
- 如果capacity
参数小于0
。
StringBuffer
public StringBuffer(String str)
- 构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。该字符串的初始容量为
16
加上字符串参数的长度。- 参数:
str
- 缓冲区的初始内容。- 抛出:
NullPointerException
- 如果str
为null
StringBuffer
public StringBuffer(CharSequence seq)
- public java.lang.StringBuilder(CharSequence seq) 构造一个字符串缓冲区,它包含与指定的
CharSequence
相同的字符。该字符串缓冲区的初始容量为16
加上CharSequence
参数的长度。如果指定的
CharSequence
的长度小于或等于 0,则返回容量为16
的空缓冲区。- 参数:
seq
- 要复制的序列。- 抛出:
NullPointerException
- 如果seq
为null
- 从以下版本开始:
- 1.5
/////////////////////////////////////////////////////////////////////////////////////////
一共四个构造函数,但是没有一个参数是Char类型的,所以,我们的程序能够通过编译和运行,说明程序中构造函数的参数应该已经发生了转化了.这四个构造方法中可以满足的也就是public StringBuffer(int capacity)了,参数中的字符都已经被转化成了int类型,它做的实际工作就是分配该int类型的大小所对应的空白缓冲区.这样最后的结果是ain就好解释了.在空白缓冲中加入几个字符,那打印输出的时候自然也就是显示这几个字符了.
所以在使用StringBuffer构造方式的时候要注意一下,包括在使用其他API的时候也是,不要想当然,有困惑还是最好查一下API文档.