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类。

  • 相关阅读:
    [转]趣题:一个n位数平均有多少个单调区间?---- From Matrix67
    2015编程之美复赛
    Codeforces Round #304 (Div. 2)
    HDU 5226
    HDU 5225
    HDU 3666
    HDU 4598
    Codeforces Round #303 (Div. 2) E
    编程之美初赛第二场AB
    2015 编程之美初赛第一场 AC题
  • 原文地址:https://www.cnblogs.com/licybupt/p/6239323.html
Copyright © 2011-2022 走看看