Java中StringBuffer和StringBuilder
StringBuffer和StringBuilder
一、StringBuffer的基本方法
StringBuffer 用于表示可以修改的字符串
1、构造方法。
StringBuffer sb1=new StringBuffer();//分配了长16字节的字符缓冲区 StringBuffer sb2=new StringBuffer(512);//分配了512字节的字符缓冲区 StringBuffer sb3=new StringBuffer("大家好");
在字符缓冲区中存放字符串"大家好",另外,后面再留了16字节的空缓冲区。
2、常用方法。
// 字符设置和替换 // 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类。