StringBuffer类详解(String、StringBuffer、StringBuilder的区别)

StringBuffer类详解

1.类结构:

·        java.lang.Object

·        java.lang.StringBuffer

·        All
Implemented Interfaces:

Serializable, Appendable, CharSequence


public final class
StringBuffer

extends
Object

implements
Serializable,
CharSequence

2.类概述:

一个类似于 String
的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。

可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。

StringBuffer
上的主要操作是append
和insert
方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。append
方法始终将这些字符添加到缓冲区的末端;而insert
方法则在指定的点添加字符。

每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大。从 JDK 5
开始,为该类补充了一个单个线程使用的等价类,即 StringBuilder。与该类相比,通常应该优先使用 StringBuilder
类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。

3.构造方法


Public Constructors

 
StringBuffer()

构造一个其中不带字符的字符串缓冲区,其初始容量为 16
个字符。

 
StringBuffer(int capacity)

构造一个不带字符,但具有指定初始容量的字符串缓冲区。

 
StringBuffer(String string)

构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。

 
StringBuffer(CharSequence cs)

构造一个字符串缓冲区,它包含与指定的
CharSequence相同的字符。

4.常用方法:


Public Methods


StringBuffer


append(double d)

double
参数的字符串表示形式追加到此序列。


StringBuffer


append(boolean b)

boolean
参数的字符串表示形式追加到序列。


StringBuffer


append(long l)

long
参数的字符串表示形式追加到此序列。


StringBuffer


append(float f)

float
参数的字符串表示形式追加到此序列。


StringBuffer


append(int i)

int
参数的字符串表示形式追加到此序列。


StringBuffer


appendCodePoint(int codePoint)

codePoint
参数的字符串表示形式追加到此序列。


int


capacity()

返回当前容量。


StringBuffer


delete(int start, int end)

移除此序列的子字符串中的字符。


StringBuffer


deleteCharAt(int index)

移除此序列指定位置的 char


int


indexOf(String string)

返回第一次出现的指定子字符串在该字符串中的索引。


StringBuffer


insert(int index, int i)

int
参数的字符串表示形式插入此序列中。


StringBuffer


insert(int index, double d)

double
参数的字符串表示形式插入此序列中。


StringBuffer


insert(int index, long l)


long参数的字符串表示形式插入此序列中。


StringBuffer


insert(int index, Object obj)

Object
参数的字符串表示形式插入此字符序列中。


StringBuffer


insert(int index, float f)

float
参数的字符串表示形式插入此序列中。


StringBuffer


insert(int index, boolean b)


boolean参数的字符串表示形式插入此序列中。


int


lastIndexOf(String string)

返回最右边出现的指定子字符串在此字符串中的索引。


int


length()

返回长度(字符数)。


StringBuffer


replace(int start,
int end, String str)

使用给定 String
中的字符替换此序列的子字符串中的字符。

5. String、StringBuffer、StringBuilder的区别

String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间。

StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量。

StringBuilderStringBuffer类功能基本相似,主要区别在于StringBuffer类的方法是多线程、安全的,而StringBuilder不是线程安全的,相比而言,StringBuilder类会略微快一点。对于经常要改变值的字符串应该使用StringBufferStringBuilder类。

一般情况下,速度从快到慢:StringBuilder>StringBuffer>String,这种比较是相对的,不是绝对的。

总结:

1) 如果要操作少量的数据用String

2) 单线程操作字符串缓冲区下操作大量数据用
StringBuilder

3) 多线程操作字符串缓冲区下操作大量数据用StringBuffer

时间: 2024-10-06 17:02:14

StringBuffer类详解(String、StringBuffer、StringBuilder的区别)的相关文章

java中String类、StringBuilder类和StringBuffer类详解

本位转载自http://www.cnblogs.com/dolphin0520/p/3778589.html 版权声明如下: 作者:海子 出处:http://www.cnblogs.com/dolphin0520/ 本博客中未标明转载的文章归作者海子和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利 正文: 探秘Java中String.StringBuilder以及StringBuffer 相信String这个类是Java中使用得

Java String类详解

Java字符串类(java.lang.String)是Java中使用最多的类,也是最为特殊的一个类,很多时候,我们对它既熟悉又陌生. 类结构: public final class String extends Object implements Serializable, Comparable<String>, CharSequence 类概述: Java程序中的所有字面值(string literals),即双引号括起的字符串,如"abc",都是作为String类的实例

Android中内容观察者的使用---- ContentObserver类详解

  转载请注明出处:http://blog.csdn.net/qinjuning 前言: 工作中,需要开启一个线程大量的查询某个数据库值发送了变化,导致的开销很大,后来在老大的指点下,利用了 ContentObserver完美的解决了该问题,感到很兴奋,做完之后自己也对ContentObserver做下总结. ContentObserver——内容观察者,目的是观察(捕捉)特定Uri引起的数据库的变化,继而做一些相应的处理,它类似于 数据库技术中的触发器(Trigger),当ContentObs

Android技术18:Android中Adapter类详解

1.Adapter设计模式 Android中adapter接口有很多种实现,例如,ArrayAdapter,BaseAdapter,CursorAdapter,SimpleAdapter,SimpleCursorAdapter等,他们分别对应不同的数据源.例如,ArrayAdater对应List和数组数据源,而CursorAdapter对应Cursor对象(一般从数据库中获取的记录集).这些Adapter都需要getView方法返回当前列表项显示的View对象.当Model发生改变时,会调用Ba

URLConnection类详解

为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处.LaplaceDemon/SJQ. http://www.cnblogs.com/shijiaqi1066/p/3753224.html URLConnection概述 URLConnection是一个抽象类,表示指向URL指定资源的活动连接. URLConnection类本身依赖于Socket类实现网络连接.一般认为,URLConnection类提供了比Socket类更易于使用.更高级的网络连接抽象.但实际上,大多数程序员都会忽略它

Cocos2d之Node类详解之节点树(二)

一.声明 本文属于笔者原创,允许读者转载和分享,只要注明文章来源即可. 笔者使用cocos2d框架的cocos2d-x-3.3rc0版本的源代码做分析.这篇文章承接上篇<Cocos2d之Node类详解之节点树(一)>. 二.简介 节点 一个Node对象. 节点树 上篇文章介绍到,Node类有一个成员变量 Vector<Node*> _children,这是一个保存所有子节点的数组,因为Node类采用遍历树的方式获取子节点进行渲染,所以我管这两个东西的结合叫节点树. 三.源码详解 &

Android开发之Html类详解

在进行Android开发中经常回忽略Html类.这个类其实很简单,就是将HTML标签文本解析成普通的样式文本.下面就让我么看一下这个类的具体介绍. 类结构: java.lang.Object    ? android.text.Html 类概述: 这个类用于处理的HTML字符串并将其转换成可显示的样式文本.但并不是所有的HTML标记的支持. 公有方法: 说其简单是应为它就有四个方法: Public Methods static String escapeHtml(CharSequence tex

Android基础入门教程——8.3.1 三个绘图工具类详解

Android基础入门教程--8.3.1 三个绘图工具类详解 标签(空格分隔): Android基础入门教程 本节引言: 上两小节我们学习了Drawable以及Bitmap,都是加载好图片的,而本节我们要学习的绘图相关的 一些API,他们分别是Canvas(画布),Paint(画笔),Path(路径)!本节非常重要,同时也是我们 自定义View的基础哦~好的,话不多说开始本节内容~ 官方API文档:Canvas:Paint:Path: 1.相关方法详解 1)Paint(画笔): 就是画笔,用于设

Android开发之MediaRecorder类详解

MediaRecorder类详解 手机一般都有麦克风和摄像头,而Android系统就可以利用这些硬件来录制音视频了. 为了增加对录制音视频的支持,Android系统提供了一个MediaRecorder的类.该类的使用也非常简单,下面让我们来了解一下这个类: 一.类结构: java.lang.Object    ? android.media.MediaRecorder 二.类概述: 用于录制音频和视频的一个类. 三.状态图: 说明: 与MediaPlayer类非常相似MediaRecorder也