Java中StringBuffer和StringBuilder

StringBuffer和StringBuilder

一、StringBuffer的基本方法

StringBuffer 用于表示可以修改的字符串

1、构造方法。

Java中StringBuffer和StringBuilder

StringBuffer sb1=new StringBuffer();//分配了长16字节的字符缓冲区
StringBuffer sb2=new StringBuffer(512);//分配了512字节的字符缓冲区
StringBuffer sb3=new StringBuffer("大家好");

在字符缓冲区中存放字符串"大家好",另外,后面再留了16字节的空缓冲区。

2、常用方法。

Java中StringBuffer和StringBuilder

// 字符设置和替换
// setCharAt(int index,char ch),将指定的字符ch放到index指出的位置。
// charAt(int index) 获得指定位置的字符
StringBuffer s1 = new StringBuffer("java");
s1.setCharAt(1, 'u');// 则s为"juva"

// 字符的插入
// insert(int offset,char ch),在offset位置插入字符ch。
StringBuffer s2 = new StringBuffer("wecome");
s2.insert(2, 'l');// 则s为"welcome"

// 在字符串末尾添加内容(Append方法)
StringBuffer s3 = new StringBuffer("中国");
s3.append("好");// 则s为"中国好"。
// 转换为不变字符串:toString()。
System.out.println(s3.toString());

// 获取字符串的长度: length()
StringBuffer s4 = new StringBuffer("abc");
System.out.println(s4.length());

// 获取字符串的容量
System.out.println(s4.capacity());

// 字符串反转
s4.reverse();
System.out.println(s4.toString());

// 删除指定字符串着中的字符
// delete(int start,int end)
StringBuffer s5 = new StringBuffer("Hello");
s5.delete(0, s5.length()); // 删除字符串s的全部字符
System.out.println(s5.toString());
        
// deleteCharAt(int index)
StringBuffer s6 = new StringBuffer("Hello");
s6.deleteCharAt(4); // 删除字符串s索引为4的字符
System.out.println(s6.toString());

// 替换字符串
// replace(int start,int end,String str)
StringBuffer s7 = new StringBuffer("Hello");
s7.replace(0, 1, "qqq");
System.out.println(s7.toString());

// substring(int start) //返回从start下标开始以后的字符串
StringBuffer s8 = new StringBuffer("Hello");
s8.substring(2);
System.out.println(s8.toString());
        
// substring(int start,int end) //返回从start到 end-1字符串
StringBuffer s9 = new StringBuffer("Hello");
s9.substring(2,3);
System.out.println(s9.toString());

二、StringBuilder,StringBuffer和StringBuilder的区别

StringBuilder和StringBuffer的方法是一样,区别是StringBuffer是线程安全,一个StringBuilder不是,你可以查看一下两个类的源码,StringBuffer的方法前面有synchronized关键字修饰。这个以后我们在讲解线程的时候会讲到。这里我们知道一下两者的区别即可:

StringBuffer线程同步,所以使用起来比较安全,但是效率较低主要是多线程和操作比较频繁是有有所体现。

StringBuilder正好相反不同步,效率高,但是多线程使用时可能会有问题。

三、String和StringBuffer的区别

1、String的不变性

 

当字符串string在内存中创建后,就不会再改变,所以对该字符串进行的所有改变操作,实际上都没有改变原来的字符串,你可以参考一下我们第一节,不过我们调用了原始的String的多少个方法,其实对原来的字符都不会有任何改变,都是重新生成一个新的字符串作为返回值,这就是所谓的Java String的不变性。

每一次的修改操作都会生成一个新的字符串,有一个不好的点——慢慢地消耗了内存,对GC来说也是非常费时的一件事,效率非常低,所以如果我们需要多次改变创建的字符串的话,那么使用String将会是个很不好的选择。

2、String与StringBuffer的区别

真是因为String是的不变性,StringBuffer或者StringBuilder就有他们的用武之地了,当然String有它的优点,就是使用方便,我们如何做出选择呢?一般如果字符串经常要做出修改,比如经常要拼接,删除等等,那么使用StringBuffer或者StringBuilder比较好,你可以在完成操作后使用toString方法转换为String类。