字符串缓冲区

StringBuffer是字符串缓缓冲区是一个容器。
特点:
1,长度是可变化的。
2,可以字节操作多个数据类型。
3,最终会通过toString方法变成字符串。
C create U update R read D delete
1,存储。
StringBuffer append() :将指定数据作为参数添加到已有数据结尾处。
stringBuffer insert (index,数据) :可以将数据插入到指定index位置。

2,删除。
StringBuffer delete (start,end) :删除缓冲区中的数据,包含start, 不包含end.
StringBuffer deleteCharAt (index) :删除指定位置的字符.

3,获取。
char charAt (int index)
int indexof (String str)
int lastIndexof (String str)
int length()
String substring(int start,int end)

4,修改。
StringBuffer replace (start, end, string) ;
void setCharAt (int index, char ch);

5,反转。
StringBuffer reverse()
普通的反转,和之前String中自己构造的差不多。

6,将缓冲区中的指定数据存储到指定数组中
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)

StringBuffer sb=new StringBuffer("abcdefg");
        char[] chs=new char[6];
        sb.getChars(1,4,chs,1);
        for (int i = 0; i < chs.length; i++) {
            System.out.format(" chs[%d]=%s ",i,chs[i]);
        }

输出:
字符串缓冲区_第1张图片

StringBuffer和String有很多相似处,也有很多不同。JDK1.5之后还出现了StringBuilder。
StringBuffer是线程同步。
StringBuilder是线程不同步。
这是转载的总结:

1.String 类不可变,内部维护的char[] 数组长度不可变,为final修饰,String类也是final修饰,不存在扩容。字符串拼接,截取,都会生成一个新的对象。频繁操作字符串效率低下,因为每次都会生成新的对象。
2.StringBuilder 类内部维护可变长度char[] , 初始化数组容量为16,存在扩容, 其append拼接字符串方法内部调用System的native方法,进行数组的拷贝,不会重新生成新的StringBuilder对象。它是非线程安全的字符串操作类, 其每次调用 toString方法而重新生成的String对象,不会共享StringBuilder对象内部的char[],会进行一次char[]的copy操作。
3.StringBuffer 类内部维护可变长度char[], 基本上与StringBuilder一致,但其为线程安全的字符串操作类,大部分方法都采用了Synchronized关键字修改,以此来实现在多线程下的操作字符串的安全性。其toString方法而重新生成的String对象,会共享StringBuffer对象中的toStringCache属性(char[]),但是每次的StringBuffer对象修改,都会置null该属性值。
部分

总结转自https://blog.csdn.net/m_Tenderness/article/details/90758848

你可能感兴趣的:(字符串缓冲区)