zoukankan      html  css  js  c++  java
  • java中String、stringbuilder、stringbuffer区别

    1.可变与不可变

    String类中使用字符数组保存字符串,如下就是,因为有“final”修饰符,所以可以知道string对象是不可变的。每次对String对象进行改变的时候其实都等同于生成了一个新的String对象,然后将引用指向新的String对象,原String对象GC回收。

      Private final char value[];

    StringBuider与stringbuffer都继承自AbstractStringBuider类,在abstractstringbuilder中也是使用字符数组保存字符串,如下就是,可知这两种对象都是可变的。

      char[] value;

    2.是否多线程安全

    String中的对象是不可变的,也就可以理解为常量,显然线程安全。

    AbstractStringBuilder是StringBuider与Stringbuffer的公共父类,定义了一些字符串的基本操作。如expandCapacity、append、insert、indexOf等公共方法。

    StringBuffer对方法加了同步所或者对调用的方法加了同步锁,所以是线程安全的。源码:

    public synchronized StringBuffer reverse() {
            super.reverse();
            return this;
    }
    public int indexOf(String str) {
        return indexOf(str, 0);   
    }

    StringBuilder并没有对方法进行同步锁,所以是非线程安全的。

    StringBuffer适用于多线程程序中,保证同步性。StringBuilder适用于单线程程序中,不保证同步性。

    在大部分情况下StringBuilder > StringBuffer > String,优先建议使用StringBuilder类。

  • 相关阅读:
    Moya 浅析
    Swift: Alamofire -> http请求 & ObjectMapper -> 解析JSON
    ReactiveCocoa 用法实例
    RACSignal的Subscription深入
    idea 不能编译生成class文件
    idea 右下角不显示git分支
    SSO单点登录的研究
    JVM内存模型简介
    Spring事务处理
    RabbitMQ
  • 原文地址:https://www.cnblogs.com/licybupt/p/6239323.html
Copyright © 2011-2022 走看看