zoukankan      html  css  js  c++  java
  • Java StringBuffer与StringBuider

    String 的值是不可变的,每次对String的操作都会生成新的String对象,不仅效率低,而且耗费大量内存空间。

    StringBuffer类和String类一样,也用来表示字符串,但是StringBuffer的内部实现方式和String不同,在进行字符串处理时,不生成新的对象,在内存使用上要优于String。

    StringBuffer 默认分配16字节长度的缓冲区,当字符串超过该大小时,会自动增加缓冲区长度,而不是生成新的对象。

    StringBuffer不像String,只能通过 new 来创建对象,不支持简写方式

    StringBuffer类中的方法主要偏重于对于字符串的操作,例如追加、插入和删除等,这个也是StringBuffer类和String类的主要区别。实际开发中,如果需要对一个字符串进行频繁的修改,建议使用 StringBuffer

    public class Demo {
        public static void main(String[] args) {
    
            String fragment = "abcdefghijklmnopqrstuvwxyz";
            int times = 10000;
    
            // 通过String对象
            long timeStart1 = System.currentTimeMillis();
            String str1 = "";
            for (int i = 0; i < times; i++) {
                str1 += fragment;
            }
            long timeEnd1 = System.currentTimeMillis();
            System.out.println("String: " + (timeEnd1 - timeStart1) + "ms");
    
            // 通过StringBuffer
            long timeStart2 = System.currentTimeMillis();
            StringBuffer str2 = new StringBuffer();
            for (int i = 0; i < times; i++) {
                str2.append(fragment);
            }
            long timeEnd2 = System.currentTimeMillis();
            System.out.println("StringBuffer: " + (timeEnd2 - timeStart2) + "ms");
        }
    
    }

    执行结果:
    String: 1410ms
    StringBuffer: 1ms

    总结

    线程安全:
    StringBuffer:线程安全
    StringBuilder:线程不安全

    速度:
    一般情况下,速度从快到慢为 StringBuilder > StringBuffer > String,当然这是相对的,不是绝对的。

    使用环境:
    操作少量的数据使用 String;
    单线程操作大量数据使用 StringBuilder;
    多线程操作大量数据使用 StringBuffer。

  • 相关阅读:
    Hadoop源代码分析(五)
    使用Solr Data Import的deltaimport功能
    hbasewriter
    Hadoop源代码分析(四)
    lucene .NET 搜索图片 功能实现
    char类型与string类型的区别
    Windows程序设计:'SM_ MOUSEWHEELPRESENT' : undeclared identifier解决办法
    汇编里的栈空间
    在汇编源程序中,数据不能以字母开头
    中值
  • 原文地址:https://www.cnblogs.com/fanren224/p/8457228.html
Copyright © 2011-2022 走看看