版权声明:尊重原创,码字不易,转载需博主同意。 https://blog.csdn.net/qq_34626097/article/details/84708495
StringBuilder类详解和String、StringBuffer、StringBuilder的操作效对比
1. StringBuilder类
- StringBuilder 和 StringBuffer 非常类似,均代表可变的字符序列,而且方法也一样
① String:不可变字符序列
② StringBuffer:可变字符序列、效率低、线程安全
③ StringBuilder(JDK1.5):可变字符序列、效率高、线程不安全
④ 点击进入StringBuffer类的使用和详解底层实现、String和StringBuffer的区别、StringBuffer的常用方法 - String使用陷阱:
string s=“a”; //创建了一个字符串 s=s+“b”; //实际上原来的"a"字符串对象已经丢弃了,现在又产生了一个字符串s+“b”(也就是"ab")。如果多次执行这些改变串内容的操作,会导致大量副本字符串对象存留在内存中,降低效率。如果这样的操作放到循环中,会极大影响程序的性能。
2. 比较一下String、StringBuffer、StringBuilder三者在插入的时候的效率。
- 对比Demo
//对比String,StringBuffer、StringBuilder三者之间的插入效率
@Test
public void test1() {
//定义String、StringBuffer、StringBuilder对象
String text = "";
long startTime = 0L;
long endTime = 0L;
StringBuffer buffer = new StringBuffer("");
StringBuilder builder = new StringBuilder("");
//往StringBuffer对象里面添加20000个字符
startTime = System.currentTimeMillis();
for(int i = 0;i<20000;i++){
buffer.append(String.valueOf(i));}
endTime = System.currentTimeMillis();
System.out.println("StringBuffer的执行时间:"+(endTime-startTime));
//往StringBuilder对象里面添加20000个字符
startTime = System.currentTimeMillis();
for(int i = 0;i<20000;i++){
builder.append(String.valueOf(i));}
endTime = System.currentTimeMillis();
System.out.println("StringBuilder的执行时间:"+(endTime-startTime));
//往String对象添加20000个字符
startTime = System.currentTimeMillis();
for(int i = 0;i<20000;i++){
text = text + i;}
endTime = System.currentTimeMillis();
System.out.println("String的执行时间:"+(endTime-startTime));
}
- 输出结果
- 得出结论是:操作效率:StringBuilder》StringBuffer》String