博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
String StringBuffer StringBuilder的异同
阅读量:5975 次
发布时间:2019-06-20

本文共 1683 字,大约阅读时间需要 5 分钟。

1.String与StrIngBuffer StringBuilder的主要区别在于StrIng是不可变对象,每次对String对象进行修改之后,相对于重新创建一个对象。

String源码解读:

private final char value[];public String() {        this.value = "".value;    }

不管何种String的构造函数,在初始化之后,其内部value是不可改变

StringBuilder源码

public final class StringBuilder    extends AbstractStringBuilder    implements java.io.Serializable, CharSequence

 可以看出继承了 AbstractStringBuilder 并且实现了序列化接口 java.io.Serializable  和 最底层接口CharSequence

public StringBuilder() {        super(16);    } AbstractStringBuilder(int capacity) {        value = new char[capacity];    }

 可以看出其底层维持了一个char[]数组 长度为16

public AbstractStringBuilder append(String str) {        if (str == null)            return appendNull();        int len = str.length();        ensureCapacityInternal(count + len);        str.getChars(0, len, value, count);        count += len;        return this;    }

 线程相关内容的 修改其内部的内容 并没有加同步机制

StringBuffer的源码检查

public final class StringBuffer    extends AbstractStringBuilder    implements java.io.Serializable, CharSequence

可以看出继承的内容类与StringBuilder相同 实现的接口相同

public StringBuffer() {        super(16);    } AbstractStringBuilder(int capacity) {        value = new char[capacity];    }

可以看出底层实现都是char数组 长度为16

@Override    public synchronized StringBuffer append(String str) {        toStringCache = null;        super.append(str);        return this;    } @Override    public synchronized StringBuffer delete(int start, int end) {        toStringCache = null;        super.delete(start, end);        return this;    }

内部涉及数据操作部分是又一个同步的过程 是线程安全的

最后涉及扩容机制 StringBuffer StringBuilder正常扩容

最后一点StringBuilder AbstractStringBuilder都是1.5 StringBuffer是1.0

 

转载于:https://www.cnblogs.com/ad-zhou/p/9824445.html

你可能感兴趣的文章
C语言100个算法经典例题(七)
查看>>
ASP.NET MVC下使用文件上传和IIS7下的默认设置限制了上传大小的方法
查看>>
java socket报文通信(三)java对象和xml格式文件的相互转换
查看>>
Selenium学习第二天,了解Selenium工作模式与学习Selenium需要具备的知识与工具。...
查看>>
cocos2d: 设置容器透明度及添加UIViewController
查看>>
一次完整的浏览器请求流程
查看>>
Notification弹出实现
查看>>
HDU 5845 Best Division
查看>>
记一次web项目总结
查看>>
Android中的像素单位详解( dp 、 sp 、 px 、 in 、 pt 、 mm )
查看>>
IIS服务无法启动的小实验之MachineKeys文件夹
查看>>
SQL Server 2008 系列简介
查看>>
C++模板实现动态顺序表(更深层次的深浅拷贝)与基于顺序表的简单栈的实现...
查看>>
树莓派raspberry pi配置无线路由器AP
查看>>
【转载】使用WIN32API获取打印机
查看>>
STORM_0002_在做好的zookeeper集群上搭建storm的开发环境
查看>>
Java命名规则
查看>>
《Python从小白到大牛》第7章 运算符
查看>>
博科:毫不迟疑地入软件网络时代
查看>>
玩转开放式虚拟格式,实战迁移虚拟机到vSphere 5
查看>>