1、StringBuffer概述
1.1、什么是StringBuffer
StringBuffer与StringBuilder一样都可以解决字符串String进行拼接操作时,每次拼接,都会构建一个新的String对象,既耗时,又浪费空间的问题
1.2、StringBuffer与StringBuilder区别
StringBuffer是线程同步的(安全的),StringBuilder是不同步的(不安全的),二者方法完全一致。
线程同步操作需要消耗更多的系统资源,所以更慢,而在日常开发过程中,同一个字符串的操作通常不会涉及多线程问题,所以在不考虑安全问题的情况下,尽量使用速度更快的StringBuilder。
2、常用方法
public StringBuffer append(Xxx xxx) //向字符串缓冲区中添加字符串
public String toString() //将缓冲区内内容返回
代码语言:javascript复制public class StringBufferDemo01 {
public static void main(String[] args) {
String s = "";
for (int i = 0; i < 5; i ) {
s = "i love java" i;
}
System.out.println(s);
StringBuffer sb = new StringBuffer();
for (int i = 0; i < 5; i ) {
sb.append("i love java" i);
}
sb.append(true);
sb.append('d');
sb.append(250);
//对象显示的信息与toString()方法有关
sb.append(new Person("admin",12));
System.out.println(sb.toString());
}
}
运行结果:
3、链式调用
在StringBuffer的方法中,有许多方法的返回值都是该类型本身,如append方法。这时,阅读API后发现,其实返回值就是其本身,这时我们可以继续调用append方法,依次类推,这种调用方法叫做链式调用。
如:
代码语言:javascript复制StringBuffer sb = new StringBuffer();
sb.append(“aaa”) .append(“bbb”) .append(“ccc”) .append(“ddd”) ;
String data = sb.toString(); //data的结果为aaabbbcccddd
代码语言:javascript复制public class StringBufferDemo02 {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
// StringBuffer sb2 = sb.append("i love java ");
// StringBuffer sb3 = sb2.append("i like java ");
// StringBuffer sb4 = sb3.append("i enjoy java ");
//
// System.out.println(sb);
// System.out.println(sb2);
// System.out.println(sb3);
// System.out.println(sb4);
sb.append("i love java").append("i like java ").append("i enjoy java");
System.out.println(sb);
}
}
运行结果: