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

  • 相关阅读:
    hadoop2.2.0+hive-0.10.0完全分布式安装方法
    linux之vim编辑器
    hive与hbase的区别与联系
    linux系统管理
    Hive 自定义函数(转)
    hive 存储格式
    ActiveMQ 使用spring模板 发布消息过程分析
    ActiveMQ spring (一)
    ActiveMQ 权限(二)
    ActiveMQ 权限(一)
  • 原文地址:https://www.cnblogs.com/licybupt/p/6239323.html
Copyright © 2011-2022 走看看