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采用的是不可变的字符序列,每次进行字符串拼接的时候,需要在字符串常量池当中创建对象,消耗大量时间,且会存在大量的副本字符串对象在常量池当中,降低了效率。

 

posted @ 2022-11-05 16:26  通过程序看世界  阅读(85)  评论(0)    收藏  举报