程序的魔法

  :: 首页 :: 博问 :: 闪存 :: :: 联系 :: :: 管理 ::

StringBuffer构造函数的使用

    在看《Java解惑》中的第23个问题的时候,一开始真的是没有看出来问题在哪里,所以先把书上的代码贴出来,让大家也看一下,因为书上的代码本来除了构造函数的陷阱之外还有其他的陷阱,所以我把书上的代码修改了,还只有一个构造函数方面的陷阱了。
                                         问题代码

Java解惑
   看看这个代码,它会输出什么结果? Pain?Gain?还是Main?
  告诉你,都错了,它输出的只是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 - 如果 strnull

StringBuffer

public StringBuffer(CharSequence seq)
public java.lang.StringBuilder(CharSequence seq) 构造一个字符串缓冲区,它包含与指定的 CharSequence 相同的字符。该字符串缓冲区的初始容量为 16 加上 CharSequence 参数的长度。

如果指定的 CharSequence 的长度小于或等于 0,则返回容量为 16 的空缓冲区。

参数:
seq - 要复制的序列。
抛出:
NullPointerException - 如果 seqnull
从以下版本开始:
1.5

/////////////////////////////////////////////////////////////////////////////////////////
一共四个构造函数,但是没有一个参数是Char类型的,所以,我们的程序能够通过编译和运行,说明程序中构造函数的参数应该已经发生了转化了.这四个构造方法中可以满足的也就是public StringBuffer(int capacity)了,参数中的字符都已经被转化成了int类型,它做的实际工作就是分配该int类型的大小所对应的空白缓冲区.这样最后的结果是ain就好解释了.在空白缓冲中加入几个字符,那打印输出的时候自然也就是显示这几个字符了.
 所以在使用StringBuffer构造方式的时候要注意一下,包括在使用其他API的时候也是,不要想当然,有困惑还是最好查一下API文档.


posted on 2006-10-06 14:44  BlueMagic  阅读(780)  评论(0编辑  收藏  举报