String/StringBuffer/StringBuilderTest的区别
String:不可变的字符序列,底层使用char[]存储
StringBuffer:可变的字符序列,线程安全(都是同步方法),效率低,底层使用char[]存储
StringBuilderTest:可变的字符序列,jdk5.0新增,线程不安全,效率高,底层使用char[]存储
创建StringBuffer对象
stringbuffer类不同于string,其对象必须使用构造器生成。一共有三个构造器:
- stringbuffer():初始容量为16的字符串缓冲区
- stringbuffer(int size):构造指定容量的字符串缓冲区
- stringbuffer(string str):将内容初始化为指定字符串
例子:
public class StringBufferTest {
public static void main(String[] args) {
String str = new String("我喜欢学习");
StringBuffer buffer = new StringBuffer("我喜欢学习");
String str1 = str + "数学";
StringBuffer buffer2 = buffer.append("数学");
System.out.println(str1 == str);
System.out.println(buffer2 == buffer);
}
}
常用方法
public class StringBufferTest {
public static void main(String[] args) {
StringBuffer buffer = new StringBuffer("hello world");
// append() 用于字符串拼接
StringBuffer buffer1 = buffer.append("python");
System.out.println(buffer1);
// delete(int start,int end) 删除指定位置的内容
StringBuffer buffer2 = buffer.delete(3,5);
System.out.println(buffer2);
// replace(int start,int end,String str) 把[start,end)位置替换为str
StringBuffer buffer3 = buffer.replace(3,5,"aaaaa");
System.out.println(buffer3);
// insert(int offset,xxx) 在指定位置插入XXX
StringBuffer buffer4 = buffer.insert(3,"bbb");
System.out.println(buffer4);
// revers() 字符串翻转
StringBuffer buffer5 = buffer.reverse();
System.out.println(buffer5);
// indexOf(String str) 返回指定子串在母串中的索引
int buffer6 = buffer.indexOf("ld");
System.out.println(buffer6);
// substring(int start,int end) 从start到end截取子串
String buffer7 = buffer.substring(3, 5);
System.out.println(buffer7);
// length() 返回母串长度
int buffer8 = buffer.length();
System.out.println(buffer8);
// charAt(int n) 返回某索引处的字符
char buffer9 = buffer.charAt(3);
System.out.println(buffer9);
// setCharAt(int n,char ch) 替换指定索引的字符
buffer.setCharAt(0, 'q');
System.out.println(buffer);
}
}
Java小白修炼手册
三者运行速度
public class StringBufferTest {
public static void main(String[] args) {
//初始设置
long startTime = 0L;
long endTime = 0L;
String text = "";
StringBuffer buffer = new StringBuffer("");
StringBuilder builder = new StringBuilder("");
//开始对比
startTime = System.currentTimeMillis();
for (int i = 0; i < 20000; i++) {
buffer.append(String.valueOf(i));
}
endTime = System.currentTimeMillis();
System.out.println("StringBuffer的执行时间:" + (endTime - startTime));
startTime = System.currentTimeMillis();
for (int i = 0; i < 20000; i++) {
builder.append(String.valueOf(i));
}
endTime = System.currentTimeMillis();
System.out.println("StringBuilder的执行时间:" + (endTime - startTime));
startTime = System.currentTimeMillis();
for (int i = 0; i < 20000; i++) {
text = text + i;
}
endTime = System.currentTimeMillis();
System.out.println("String的执行时间:" + (endTime - startTime));
}
}