zoukankan      html  css  js  c++  java
  • String,StringBuffer,StringBuilder的区别

      String对象是字符串常量,不可变的,底层是用final修饰的,public final class String。

      我们经常做的字符串+运算,这样是一种不可取的做法,因为String的对象是常量。

      比如String s = "123",s=s+"45",它不是在原来的s上做的操作,而是又重新创建了个对象,赋值给他,GC(垃圾回收机制)在把原来的对象回收,这样是非常消耗内存和时间的,不建议使用。

      

      StringBuffer对象是字符串变量,可变,作的操作都是在原先对象的基础上进行的,相比String会好很多。

      比如StringBuffer s = new StringBuffer().append("123"),s.append("45"),执行完这两行代码,只创建了一个对象s。

      StringBuilder对象是字符串变量,可变,和StringBuffer都是在原先得对象上进行相应的操作。

      区别:

        (1)String-->字符串变量,StringBuffer和StringBuilder-->字符串变量

        (2)String-->适用于少量的字符串操作,StringBuffer-->适用于在多线程下,在字符串缓冲区进行大量的字符串操作,StringBuilder-->适用于单线程下在字符串缓冲区进行大量操作

        (3)String和StringBuilder线程不安全,StringBuffer线程安全,方法几乎都使用了锁机制

        (4)执行速度String最慢,其次是StringBuffer,最快的是StringBuilder,StringBuffer和StringBuilder相差较少

      测试:

    /**
     * @Author:Alex_lei
     * @Description: Test (String,StringBuilder,StringBuffer) speed
     */
    public class StringBuffer_Builder {
        public static void main(String[] args) {
            long start = System.currentTimeMillis();
            String str = "";
            for(int i=0;i<10000;i++){
                str=str+"a";
            }
            long stop = System.currentTimeMillis();
            System.out.println(stop-start);
            start = System.currentTimeMillis();
            StringBuilder stringBuilder = new StringBuilder();
            for(int i=0;i<10000;i++){
                stringBuilder.append("a");
            }
            stop = System.currentTimeMillis();
            System.out.println(stop-start);
            start = System.currentTimeMillis();
            StringBuffer stringBuffer = new StringBuffer();
            for(int i=0;i<10000;i++){
                stringBuffer.append("a");
            }
            stop = System.currentTimeMillis();
            System.out.println(stop-start);
    
        }
    }
    

      结果:

      138 -->String

      0 -->StringBuilder

      1 -->StringBuffer

  • 相关阅读:
    如何:使用向导来处理项目模板 【转载】
    .NET : 如何在生成XML文档时绑定样式表
    如何在生产环境部署K2的流程
    SQL Server 数据库文档生成工具开源项目【合作邀请】
    新的纪元
    SharePoint : 谁说WSS不支持审核
    C++ : 类型的别名和对象的别名
    C++: 引用和地址运算符
    Infopath : 如何通过代码复制格式文本框的值
    正确地使用投影仪和移动硬盘
  • 原文地址:https://www.cnblogs.com/lyr999736/p/9189929.html
Copyright © 2011-2022 走看看