StringBuffer:
线程安全的可变字符序列。一个类似于 String 的字符串缓冲区
在对字符串进行修改时,不会创建新的字符串对象,StringBuffer类提供了常见的字符串操作的方法,如追加、插入、反序、替换、长度等
看例子
- String sting ="";
- for (int i = 0; i <100; i++) {
- sting=sting+"1";
- }
- System.out.println(sting);
分析:
隐患,效率非常的低,我们创建了100个String对象,每循环一次都会创建一个新的,并且上一次循环创建的那个,就被废弃了 。被废弃的这些字符串造成了垃圾空间占用,jvm中的垃圾回收器(GC)就要工作,去回收这些垃圾空间。
- StringBuffer s =new StringBuffer("");
- for (int i = 0; i <100; i++) {
- s.append("1");
- }
- String string=s.toString();
- System.out.println(string);
- }
StringBuffer和StringBuilder方法:
append()
字符串增加
- StringBuffer strBuffer = new StringBuffer();
- strBuffer.append("我爱"); //追加字符串
- strBuffer.append("北京");
- strBuffer.append("天安门");
- System.out.println(strBuffer.toString());//我爱北京天安门
delete()
删除字符串
- strBuffer.append("我爱北京天安门");
- strBuffer.delete(2, 4);
- System.out.println(strBuffer.toString());//我爱天安门
insert()
插入字符串
- strBuffer.append("我爱北京天安门");
- strBuffer.insert(7, "是一座庄伟的建筑");
- System.out.println(strBuffer.toString());//我爱天安门是一座庄伟的建筑
length()
字符串长度
replace()
字符串替换
- strBuffer.append("我爱北京天安门");
- strBuffer.replace(2, 7, "清华大学");
- System.out.println(strBuffer.toString());//我爱清华大学
reverse()
字符反序
- strBuffer.append("我爱你");
- strBuffer.reverse();
- System.out.println(strBuffer.toString());//你爱我
charAt(int index)
indexOf()
字符索引
索引的值存在,则返回0 索引的值不存在,则返回-1
- strBuffer.append("我爱你");
- System.out.println(strBuffer.indexOf("我",2));//-1
StringBuilder 和StringBuffer提供了一些对String 的内容的操作方法
StringBuilder 和StringBuffer,String 之间的关联
String因为字符串是常量,不能修改内容。在内容变化的时候会创建多个对象在内存中不断的分配空间,不断垃圾回收,效率低
StringBuffer,StringBuilder都是string的增强了,可以在原有的字符串上面做多次的变化,而创建的对象只有一个
效率要比string高很多。其中StringBuffer是一个线程安全类,在使用的时候会做线程同步,效率比StringBuilder要低一些