文档章节

StringBuffer与StringBuilder详解

htq
 htq
发布于 2016/07/26 09:41
字数 461
阅读 6
收藏 0

刚刚在参加网易实习生在线考试的时候,出了一道选择题谈到了StringBuilder这个类的一些选项,虽然那道题自己做对了,但是也提醒了我应该好好了解一些StringBuffer与StringBuilder。

先来看看这两个类的类结构图:

从类的结构图,我们可以看到:

1)StringBuffer与StringBuilder都实现了相同接口CharSequence,Serializable及继承自相同的类AbstractStringBuilder。

2)既然它们都继承自AbstractStringBuilder,而这个抽象类提供了StringBufferStringBuilder绝大部分的实现。因此StingBuffer与StringBuilder在功能上完全相同,唯一不同是它们在不同情况下的运行效率不同,具体说是在多线程与单线程下的效率不同。因为StringBuffer所有方法(构造方法除外)签名中都使用 synchronized 限定,也就是所有的方法都是同步的 这我们可以通过查看它们的源码,如下:

StringBuffer中的replace()方法

public synchronized StringBuffer replace(int start, int end, String str) {
        super.replace(start, end, str);
        return this;
}

StirngBuilder中的replace()方法:

public StringBuilder replace(int start, int end, String str) {
        super.replace(start, end, str);
        return this;
}

其实java中的这种情况在集合中也存在,如:HashTable是线程安全的,很多方法都是synchronized方法,而HashMap不是线程安全的,但其在单线程程序中的性能比HashTable要高,,区别在于StringBuffer线性安全的,适合多线程中使用。StringBuilder线性不安全的,不适合多线程中使用。新引入的StringBuilder类不是线程安全的,但其在单线程中的性能比StringBuffer高,这是因为StringBuffer为了达到线程安全的目的在一定程度上会降低程序的性能。

3)它们都可以通过append()方法来动态的添加它们的长度。



本文转载自:http://blog.csdn.net/htq__/article/details/50958779

共有 人打赏支持
htq

htq

粉丝 19
博文 67
码字总数 1007
作品 3
武汉
StringBuffer&StringBuilder详解

序言 StringBuffer与StringBuilder是java.lang包下被大家熟知的两个类。其异同为:一、长度都是可扩充的;二、StringBuffer是线程安全的,StringBuilder是线程不安全的。那么他们的长度是如何...

六只
2012/02/03
9.8K
2
Java字符串的String、StringBuilder、StringBuffer三者特性详解

一、不可变String类型 字符串是计算机程序设计中的,最常见行为,Java的字符串操作最主要的类是String,并且String对象是不可变的(Immutable),即对象一旦创建在内存中,那么它的内容就不再...

断桥残雪断桥残雪
2015/08/12
0
0
String,StringBuilder,StringBuffer对比

简述 StringBuilder 对比 StringBuffer StringBuilder是非线程安全 StringBuffer是线程安全的。 StringBuilder和StringBuffer其余的特性都是一样的,他们与String的区别: StringBuilder与S...

Real_man
03/20
0
0
java中String、StringBuffer、StringBuilder的区别 - jihite

java中String、StringBuffer、StringBuilder的区别 - jihite 博客园jihite2018-01-011 阅读 StringBufferjavaString Java里面提供了String,StringBuffer和StringBuilder三个类来封装字符串 ......

博客园_jihite
01/01
0
0
Java: String, StringBuilder和StringBuffer 三者之间的区别

今天我们将分析Java中String,StringBuilder和StringBuffer三者之间的细微不同点。 String String是非易失性的(一旦创建不会改变)。当一个String变量被创建时,它将被存储在Constant Stri...

周宇YuZhou
2016/03/14
39
0

没有更多内容

加载失败,请刷新页面

加载更多

Sqoop 操作实例补充

导入指定字段和指定条件的行记录 # 指定导入的字段--columns <col,col,col…># 指定过滤条件--where <where clause># 设置切分的工作单元--split-by <column-name># 目标目录存在...

PeakFang-BOK
14分钟前
1
0
App store 侵权投诉

App Store Content Dispute 侵权投诉 https://www.apple.com/legal/internet-services/itunes/appstorenotices/#?lang=zh...

壹峰
18分钟前
0
0
教程:如何在window上安装Apache HTTP Server

Apache官网只提供 Apache HTTP Server 的源代码,不提供编译好的二进制文件。 不过我们还是可以从网络上找到其他人编译好的Apache HTTP Server。 首先,从 https://www.apachehaus.com/cgi-b...

Doxde
34分钟前
0
0
中国移动蔡谦:5G传输准备就绪

目前5G已成业界热议话题,在即将到来的万物互联时代,5G是非常关键的技术。且5G相比4G,业务场景多种多样,对5G承载网带来巨大挑战。5G传输,承载先行并不仅仅是一个口号。当前5G承载网的部署...

linux-tao
42分钟前
4
0
维护“修理权”,苹果使用专有软件工具来修复MacBook Pro和iMac Pro

根据上月发给苹果授权服务提供商的一份文件,苹果公司正在使用新的专有软件诊断工具来修复MacBook Pros和iMac Pros,如果不用专有软件工具来修复关键部件,将会导致“系统失效和修复不完整”...

linuxCool
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部