Java-String、StringBuffer、StringBuilder的对比
String、StringBuffer和StringBuilder的比较
(1)StringBuffer和StringBuilder非常类似,均表示可变的字符序列,而且方法也都一样
(2)String:不可变字符序列,效率低,但是复用率高
(3)StringBuffer:可变字符序列,增删改效率较高,线程安全
(4)StringBuilder:可变字符序列、效率最高,线程不安全
String、StringBuffer和StringBuilder的选择
(1)如果字符串当中存在大量的修改操作,一般使用StringBuffer或者StringBuilder
(2)如果字符串当中存在大量的修改操作,并在单线程的情况,使用StringBuilder
(3)如果字符串当中存在大量的的修改操作,并在多线程的情况,使用StringBuffer
(4)如果我们的字符串很少修改,被多个对象引用,使用String,比如配置信息等
性能对比:
代码
public class TestString { public static void main(String[] args) { StringBuilder builder = new StringBuilder(); //获取开始时间 long startTime = System.currentTimeMillis(); for (int i = 0; i < 30000; i++) { builder.append(i); } //获取结束时间 long endTime = System.currentTimeMillis(); System.out.println("StringBuilder拼接字符串消耗的时间:" + (endTime - startTime)); StringBuffer buffer = new StringBuffer(); //获取开始时间 startTime = System.currentTimeMillis(); for (int i = 0; i < 30000; i++) { buffer.append(i); } //获取结束时间 endTime = System.currentTimeMillis(); System.out.println("StringBuffer拼接字符串消耗的时间:" + (endTime - startTime)); String str = ""; //获取开始时间 startTime = System.currentTimeMillis(); for (int i = 0; i < 30000; i++) { str += i; } //获取结束时间 endTime = System.currentTimeMillis(); System.out.println("String拼接字符串消耗的时间:" + (endTime - startTime)); } }
运行结果
结果分析
StringBuffer和StringBuilder采用的是可变的字符序列,拼接一个元素的时候,只需要往字符数组当中填充元素即可,String采用的是不可变的字符序列,每次进行字符串拼接的时候,需要在字符串常量池当中创建对象,消耗大量时间,且会存在大量的副本字符串对象在常量池当中,降低了效率。

浙公网安备 33010602011771号