zoukankan      html  css  js  c++  java
  • String、StringBuffer、StringBuilder的区别和解析

    1、三个类之间的关系

      他们都是通过字符数组来实现的,继承关系

                     

      String:字符串常量,不可变类

      StringBuffer:字符串变量,可变类,线程安全

      StringBuilder:字符串变量,可变类,线程不安全

    2、执行速度

      String < StringBuffer < StringBuildrr

      两个易混淆的例子

    1 String s1 = "abc" + "d";
    2 String s2 = "a";
    3 String s3 = "b";
    4 Sting s4 = s2 + s3;
    5 StringBuffer buffer = new StringBuffer("a").append("b");

      在这里s1的速度比s4的执行速度快,在s1和StringBuffer比较中,String 对象的字符串拼接其实是被 JVM 解释成了 StringBuffer 对象的拼接,所以这些时候 String 对象的速度并不会比 StringBuffer 对象慢

    3、线程安全和非线程安全

      StringBuffer是线程安全的,StringBuilder是线程不安全的,所以执行速度StringBuffer更快一些,因为要保证线程安全肯定会增大一些开销

      观察源码,这里就不贴了,StringBuilder中通过synchronized来保证线程安全,可是!并不是所有的方法都用了synchronized关键字来修饰,没有synchronized修饰的方法是调用StringBuffer类的其他方法来实现同步的。

    4、总结

      String:适用于少量的字符串操作的情况

      StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况

      StringBuffer:适用于多线程下在字符缓冲区进行大量操作的情况

  • 相关阅读:
    ASP.NET 2.0 X64的奇怪问题
    【分享】从网上爬的WPF学习资料
    大家一起学习less 5:字符串插值
    大家一起学习less 3:命名空间
    我的模块加载系统 v18
    大家一起学习less 2:自带函数
    “计算机之子”的MVVM框架源码学习笔记
    我的MVVM框架 v0.1发布
    大家一起学习less 6:一些有用的混合函数
    less源码学习
  • 原文地址:https://www.cnblogs.com/ccxka/p/9577352.html
Copyright © 2011-2022 走看看