1、运行时间对比
(1)StringBuilder拼接十万次:
StringBuilder sb=new StringBuilder();
int start=(int) System.currentTimeMillis();
for(int i=0;i<100000;i++) {
sb.append(i);
}
int end=(int) System.currentTimeMillis();
System.out.println("所需时间为"+(end-start)+"毫秒");
运行结果为
(2)String拼接十万次:
String str=new String();;
int start=(int) System.currentTimeMillis();
for(int i=0;i<100000;i++) {
str+=i;
}
int end=(int) System.currentTimeMillis();
System.out.println("所需时间为"+(end-start)+"毫秒");
运行结果:
2、String的底层原理
(1)String做拼接操作时,每有一次单等复制,底层会创建一个StringBuilder对象(查看class文件)
步骤:打开bin目录找到.class文件 ->cmd运行命令 javap -verbose .class文件名
(2)StringBuilder通过toString转成String时也会new一个String
(ctrl点进StringBuilder的同String方法查看)
public String toString() {
// Create a copy, don't share the array
return new String(value, 0, count);
}
(3)StringBuilder做拼接操作时,可以在原StringBuilder的基础上直接拼接,不会再new新的对象,这就大大提高了运行速度。所以StringBuilder的拼接比String高效。