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

  • 相关阅读:
    java并发编程
    Linux C++服务器端进程SDK
    定时器SDK
    Redis3.0集群方案分析
    DES
    生成验证码
    MVC Ajax.BeginForm 提交上传图片
    EF LIKE 查询
    JS 60秒后重发送验证码
    EF 指定字段修改
  • 原文地址:https://www.cnblogs.com/licybupt/p/6239323.html
Copyright © 2011-2022 走看看