常用类的一个比较

常用类

String、StringBuffer 和 StringBuilder 的比较

  1. StringBuilder和StringBuffer非常类似,均代表可变的字符序列,而且方法
    也一样
  2. String: 不可变字符序列,效率低,但是复用率高。
  3. StringBuffer: 可变字符序列、效率较高(增删)、线程安全,看源码
  4. StringBuilder: 可变字符序列、效率最高、线程不安全
  5. String使用注意说明:
    string s= "a"; //创建了-一个字符串
    s += "b"; //实际上原来的" a"字符串对象已经丢弃了,现在又产生了一个字符
    串s+ "b" (也就是"ab")。 如果多次执行这些改变串内容的操作,会导致大量副
    本字符串对象存留在内存中,降低效率。如果这样的操作放到循环中,会极大
    影响程序的性能=>结论:如果我们对String做大量修改,不要使用String

之后对结论进行测试

public class StringCompare {
    public static void main(String[] args) {
        long startTime = 0L;
        long endTime = 0L;


        StringBuffer buffer = new StringBuffer("");
        startTime = System.currentTimeMillis();
        for (int i = 0; i < 50000; i++) {//StringBuffer 拼接 50000 次
            buffer.append(String.valueOf(i));
        }
        endTime = System.currentTimeMillis();
        System.out.println("StringBuffer 的执行时间:" + (endTime - startTime));


        StringBuilder builder = new StringBuilder("");
        startTime = System.currentTimeMillis();
        for (int i = 0; i < 50000; i++) {//StringBuilder 拼接 50000 次
            builder.append(String.valueOf(i));
        }
        endTime = System.currentTimeMillis();
        System.out.println("StringBuilder 的执行时间:" + (endTime - startTime));


        String text = "";
        startTime = System.currentTimeMillis();
        for (int i = 0; i < 50000; i++) {//String 拼接 50000
            text = text + i;
        }
        endTime = System.currentTimeMillis();
        System.out.println("String 的执行时间:" + (endTime -startTime));
    }

测试结果如下

 

 

我们可以看到StringBuilder运行速度大于StringBuffer大于String

结论

  1. 如果字符串存在大量的修改操作,一般使用StringBuffer或StringBuilder
  2. 如果字符串存在大量的修改操作,并在单线程的情况,使用StringBuilder
  3. 如果字符串存在大量的修改操作,并在多线程的情况,使用StringBuffer
  4. 如果我们字符串很少修改,被多个对象引用,使用String, 比如配置信息等
posted @ 2022-07-30 23:33  AINIBYM  阅读(30)  评论(0)    收藏  举报