StringBuffer构造函数的使用

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

 1 import java.util.*;
 2 
 3 public class Rhymes {
 4     private static Random rnd = new Random();
 5 
 6     public static void main(String[] args) {
 7         StringBuffer word = null;
 8         switch(rnd.nextInt(3)) {
 9             case 1:  word = new StringBuffer('P');
10                      break;
11             case 2:  word = new StringBuffer('G');
12                      break;
13             default: word = new StringBuffer('M');
14                      break;
15         }
16         word.append('a');
17         word.append('i');
18         word.append('n');
19         System.out.println(word);
20     }
21 }
22 
   看看这个代码,它会输出什么结果? 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文档.

参与评论 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值