本文已参与「新人创作礼」活动,一起开启掘金创作之路。
先前知识:
1.Java对数组进行初始化时,该数组所占的内存空间,数组长度都是不可变的
2.创建一个字符串,为字符串对象分配内存空间,会耗费掉一定的时间和空间代价(CPU,内存),作为基础的数据类型,大量频繁的创建字符串,极大程度地影响程序的性能。
StringBuffer
StringBuffer是一个字符串缓冲区,是一个容器,源码中StringBuffer类中有字符数组
在字符串拼接的过程中,用String创建的对象每次调用str+=i都会创建对象,因为String类的源码中字符数组被final修饰,被final修饰的变量或属性是不可再修改的,如果想改变值得大小,只能取重新创建对象赋值,而StringBuffer中得数组没有加final修饰,stringBuffer.append()不会创建新对象,这也就是StringBuffer快的原因
public class Demo {
public static void main(String[] args) {
test01();
test02();
}
public static void test01(){
String str = "";
long currentTimeMillis = System.currentTimeMillis();//当前的毫秒值
//字符串拼接
for(int i = 0;i<10000;i++){
str +=i;
}
System.out.println(str);
//计算String的运行的时长,输出时间80ms
System.out.println(System.currentTimeMillis()-currentTimeMillis);
}
public static void test02(){
//测试StringBuffer
StringBuffer stringBuffer = new StringBuffer();
long currentTimeMillis = System.currentTimeMillis();
//拼接字符串
for(int i = 0;i<10000;i++){
stringBuffer.append(i);
}
System.out.println(stringBuffer.toString());
//输出时间3ms
System.out.println(System.currentTimeMillis()-currentTimeMillis);
}
}
代码简述: 测试String和StringBuffer的执行速度
StringBuilder
StringBuffer和StringBuilder的区别
1.StringBuffer是线程安全的,StringBuilder是线程不安全的
2.处理速度不同,由于StringBuffer线程安全,所以在一些处理上会加锁控制,StringBuffer的速度没有StringBuilder快
StringBuffer和String区别
StringBuffer和StringBuilder并不一定能替代String,对于小数量的字符串常量拼接,其速度是大于使用StringBuffer,当大量的数据需要拼接时,StringBuffer才会比String快