栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

String 、StringBuffer 、 StringBuilder区别

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

String 、StringBuffer 、 StringBuilder区别

String 、StringBuffer 、 StringBuilder区别

目录
      • 1、String
      • 2、StringBuilder、StringBuffer
        • 共同点:
        • 区别:
          • 1、运行速度
          • 2、线程安全性

1、String

String是字符常量,一旦确定就不可变,原因是String 类中使⽤ final 关键字修饰字符数组来保存字符串,

private final char value[] ;
2、StringBuilder、StringBuffer

StringBuilder和StringBuffer均为字符串变量,都继承⾃ AbstractStringBuilder 类,具有可变性,原因在 AbstractStringBuilder 中也是使⽤字符数组保存字符串 char[]value 但是没有⽤ final 关键字修饰,所以这两种对象都是可变的。

共同点:

三者都是字符串类。StringBuilder和StringBuffer都是继承AbstractStringBuilder类,存储字符串都是使用数组进行存储的。

区别: 1、运行速度

StringBuilder > StringBuffer > String

原因:String是字符常量,当 String 类型改变时,都会⽣成⼀个新的 String 对象,然后将指针指向新的 String 对象。而StringBuilder和StringBuffer均为字符串变量,StringBuffer 每次都会对 StringBuffer 对象本身进⾏操作,⽽不是⽣成新的对象并改变对象 引⽤。

2、线程安全性

String、StringBuffer是线程安全的,两者的区别在于,String 中的对象是不可变的,StringBuffer 对⽅法加了sychronized修饰,所以是线程安全的,StringBuilder 并没有对⽅法进⾏加同步锁,所以是⾮线程安全的。

StringBuffer部分源码

//StringBuffer源码
  @Override
    public synchronized void trimToSize() {
        super.trimToSize();
    }

    
    @Override
    public synchronized void setLength(int newLength) {
        toStringCache = null;
        super.setLength(newLength);
    }

StringBuilder部分源码

 // StringBuilder部分源码   
public StringBuilder append(StringBuffer sb) {
        super.append(sb);
        return this;
    }

    @Override
    public StringBuilder append(CharSequence s) {
        super.append(s);
        return this;
    }

应用场景:

  • 操作少量的数据: 适⽤ String
  • 单线程操作字符串缓冲区下操作⼤量数据: 适⽤ StringBuilder
  • 多线程操作字符串缓冲区下操作⼤量数据: 适⽤ StringBuffer

参考视频:https://www.bilibili.com/video/BV1cr4y1m7id?p=11

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/584467.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号