Java: StringBuffer类的运用

        字符串的学习不比其他数据类型的学习,不管是对对象(对象的实体、属性等)的打印,还是在平常所有可以展示出来供我们进行参考的数据内容,共同点就是它们都是 string 字符串,都是一种字符串文本,而且在对一些我们所想表达的数据的提交和获取时,都是一种 string 字符串数据,就好比在文本框 TextBox 输入我们的建议内容,在微信登录的时候对账号密码进行输入。

1、实体是可变的

        不同于 string 对象,StringBuffer 有更灵活的实体空间,它是一种可变的字符串对象,而 string 对象的实体是不可变的,一旦进行了赋值,其实体不可以再发生变化(实体:好比指令的地址码,是一种具有指向的数据引用)。

举例:

//  hashCode()返回的是虚拟机地址,无法获取实际内存地址,但可以认为是Java对象的内存地址

String s = "a";
System.out.println("对于String对象:");
System.out.println("改变前的引用:"+s.hashCode());
s = "a"+"1";
System.out.println("改变实体内容后:"+s.hashCode());

System.out.println();

StringBuffer a = new StringBuffer("a");
System.out.println("对于StringBuffer对象:");
System.out.println("改变前的引用:"+a.hashCode());
a.append("1");
System.out.println("改变实体内容后:"+a.hashCode());

结果:

Java: StringBuffer类的运用

        可见,每每更改一次 string 对象,都会新建一个新的实体,无疑加大了内存空间的占用,但在Java中没有很明显的展示出来,是因为Java有自带的对无效无用的数据进行空间清理的功能。

2、实体的内存空间可以自动地改变大小

        其实对于所有的数据都应该有他的最大容量、最大的数据长度,对于 StringBuffer 对象也是,从刚新建所 new 的新对象也有 0 个长度,16 的容量,每次所附加 append 的字符串序列,都会改变它的长度和容量,这也就做到了对 StringBuffer 对象的实体的内存空间可以自动地改变大小的属性,使得数据更加灵活。

        三个基本的构造方法:

  • StringBuffer():创建一个无参数的 StringBuffer 对象;
  • StringBuffer(int size):创建一个可以指定分配对象实体的初始容量为参数 size 指定的字符                                           个数的 StringBuffer 对象;
  • StringBuffer(String s):创建一个可以指定分配对象实体的初始容量为参数 s 的字符序列的                                            长度再加 16 的对象。 

 3、常用方法:

(1)append方法:

        append(String s):追加 String 对象 s 的字符序列到 StringBuffer(放 StringBuffer 后面)                                            中,并返回当前对象的引用;

        append(int n):将 int 型数据 n 转化为 String 对象再追加到当前对象的字符序列中,并返回                                     当前对象的引用;

        append(Object o):将一个 Object 对象 o 的字符序列表示追加到当前对象的字符序列中,并                                          返回当前对象的引用。

(2)public char charAt(int n) 和 public void setCharAt(int n, char ch):

        char charAt(int n) :获取 StringBuffer 对象的字符序列位置 n 上的字符;

        setcharAt(int n, char ch):当前对象的字符序列位置 n 处的字符用参数 ch 指定的字符替换

(3)StringBuffer insert(int index, String str):

        将参数 str 指定的字符序列插入到参数 index 指定的位置,并返回当前对象的引用。

(4)public StringBuffer reserve():

        将当前对象实体中的字符序列翻转,并返回当前对象的引用。

(5)StringBuffer delete(int startIndex, int endIndex):

        将当前对象实体中的从 startIndex 位置到 endIndex - 1 位置处的字符序列进行删除,并返回当前对象的引用。

(6)StringBuffer replace(int startIndex, int endIndex, String str):

        将当前对象从 startIndex 到 endIndex - 1 的字符序列的一个子字符序列用参数 str 指定的字符序列替换,并返回当前对象的引用。

例子:

public class Example8_14 {
	public static void main(String[] args) {

		StringBuffer strb = new StringBuffer();
		strb.append("得学习");
		System.out.println(strb);

		System.out.println("长度:"+strb.length());
		System.out.println("容量:"+strb.capacity());

		strb.setCharAt(0, 'D');
		strb.replace(1, 2, "ei");
		System.out.println(strb);

		strb.insert(3, " xue xi");
		System.out.println(strb);

		int index = strb.indexOf("习");
		System.out.println(index);

		strb.replace(index, strb.length(), ", hello!");
		System.out.println(strb);

	}
}

Java: StringBuffer类的运用

上一篇:Java初学笔记16


下一篇:Java学习7:String类、StringBuffer类、StringBuilder类的应用学习及源码分析