String、StringBuffer、StringBuilder 的区别
本文代码使用的jdk版本为1.8
动态拼接字符串时,String的效率不如StringBuffer
测试代码如下:
String str = "";
System.out.println(System.currentTimeMillis());
for(int i=0; i<10000; i++){
str += i;
}
System.out.println(System.currentTimeMillis());
System.out.println();
StringBuffer sbf = new StringBuffer();
System.out.println(System.currentTimeMillis());
for(int i=0; i<10000; i++){
sbf.append(i);
}
System.out.println(System.currentTimeMillis());
结果如下:
静态内容拼接 如:
String s = "测试"+"内容"+"拼接";
java虚拟在编译的时候会将内容优化为”测试内容拼接”;
线程安全
StringBuffer 是线程安全的,StringBuilder是非线程安全的,所以在效率上不如StringBuilder
是否生成多个对象
String中保存内容用的是final char value[]
StringBuffer、StringBuilder中保存内容用的是char[] value
String的每一次操作都会生成一个新的对象,而StringBuffer、StringBuilder则会在扩容时生成一个新的数组,并将value指向这个数组