1、为什么要有StringBuffer,StringBuilder
任何的字符串常量都是String对象,而且String的常量一旦
声明不可改变,如果改变对象内容,改变的是其引用的指向
而已。通常来讲String的操作比较简单,但是由于String的不
可更改特性,为了方便字符串的修改,提供StringBuffer和
StringBuilder类。StringBuffer 和 StringBuilder 大部分功能
是相同的。主要介绍StringBuffer
2、StringBuffer的一些用法
(1)字符串反转:
public synchronized StringBuffer reverse()
代码示例: 字符串反转
StringBuffer sb = new StringBuffer("helloworld");
System.out.println(sb.reverse());
(2)删除指定范围的数据:
public synchronized StringBuffer delete(int start, int end)
代码示例: 观察删除操作
StringBuffer sb = new StringBuffer("helloworld");
System.out.println(sb.delete(5, 10));
(3)插入数据
public synchronized StringBuffer insert(int offset, 各种数据类型 b)
代码示例: 观察插入操作
StringBuffer sb = new StringBuffer("helloworld");
System.out.println(sb.delete(5, 10).insert(0, "你好"));
3、String 和 StringBuilder StringBuffer 区别:
1、后两者包含了一些String没有的方法 比如reverse方法
2、后两者是可变的,String是不可变的。String的每次拼
接,都会产生新的对象,而后两者每次的拼接都返回的是
this,即不创建新的对象
3、StringBuilder 之间 StringBuffer 区别:
StringBuilder和String 出现在单线程情况下
StringBuffer因为有synchronized关键字 所以一般出现
多线程情况下,是线程安全的。
4、 StringBuilder和 String之间有啥区别!!!
String的拼接 + 会被优化 优化为StringBuilder . append了
在循环当中 不可以使用String直接进行拼接 这样会产生大
量的临时对象,包括优化之后StringBuilder对象。
应这样做:
public class TestDemo2 {
public static void main(String[] args) {
String str = "abc";
StringBuilder sb = new StringBuilder();
sb.append(str);
for(int i = 0;i < 10;i++) {
str = sb.append(i).toString();
}
System.out.println(str);
}