版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Katherine_java/article/details/82021054
1.区别
1.1 三者本质区别
String:每次增加数据都会开辟新空间,存储数据,将上一块空间通过GC进行回收
StringBuiler、StringBuffer:是可变长度,数据增加是直接在现有空间进行操作
1.2 StringBuiler StringBuffer区别
非线程安全 StringBuiler:
线程安全 StringBuffer:多线程中建议使用
2.用法
2.1 三者用法
String str ="abc1"; str += "jk";StringBuilder str2 = new StringBuilder("abc2"); str2.append("jk");StringBuffer str3 = new StringBuffer("abc3"); str3.append("jk");
2.2 具体示例
package com.java8.string0824;
public class Test1 {
public static void main(String arg[]){
// 1.String
// 每次增加数据都会开辟新空间,存储数据,将上一块空间通过GC进行回收
// 循环过程中:开辟1000个空间,销毁999次
long startTime = System.currentTimeMillis();
String str ="abc1";
System.out.println(str);
for (int i = 0; i < 1000; i++) {
str += "jk";
}
System.out.println(str);
long endTime = System.currentTimeMillis();
System.out.println(endTime - startTime);
// 2.StringBuilder
// 是可变长度,数据增加是直接在现有空间进行操作
// 不会开辟和销毁新空间
// 仅仅在现有空间中,增加数据
long startTime2 = System.currentTimeMillis();
StringBuilder str2 = new StringBuilder("abc2");
System.out.println(str2);
for (int i = 0; i < 1000; i++) {
str2.append("jk");
}
System.out.println(str2);
long endTime2 = System.currentTimeMillis();
System.out.println(endTime2 - startTime2);
// 3.StringBuffer
// 是可变长度,数据增加是直接在现有空间进行操作
// 不会开辟和销毁新空间
// 仅仅在现有空间中,增加数据
long startTime3 = System.currentTimeMillis();
StringBuffer str3 = new StringBuffer("abc3");
System.out.println(str3);
for (int i = 0; i < 1000; i++) {
str3.append("jk");
}
System.out.println(str3);
long endTime3 = System.currentTimeMillis();
System.out.println(endTime3 - startTime3);
}
}
结果:
3.String、StringBuiler、StringBuffer的运行速度
StringBuile > StringBuffer > String
4.PS
String:针对少量的字符串操作
StringBuiler、StringBuffer:大量字符串操作使用另外两个