文档章节

初识java中String、StringBuffer、StringBuilder的用法及异同

好兄弟
 好兄弟
发布于 2017/02/16 08:46
字数 1415
阅读 26
收藏 0

引子:

1)上周学习的java.lang包中:String,StringBuffer, StringBuilder 三个类的区别

2)java.util包中 集合类的接口:Collection,Map,Set、List、Queue 使用场景。 

3)实际应用:两个集合的比较,一组数据其中被修改几条后统一提交到后台,如何快速处理save到库中。

 

 一、String、StringBuffer、StringBuilder三者最大的区别在于后两者表示的字符串可以在后边改变字符串的长度,长度可变。而String是一个固定长度的字符串, String中的对象是不可变的,也就可以理解为常量线性安全是必然的

 二、StringBuffer、StringBuilder两者的区别在于速度和安全性,StringBuilder的速度比较快。

AbstractStringBulider(抽象类)是StringBuffer、StringBuilder的公共父类,定义了很多常用的公共方法如expandCapacity、append、insert、indexOf等。

 三、StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是线性安全的。

 四、StringBuilder并没有对方法进行加同步锁,所以是线性安全的。

 五、StringBuilder、StringBuffer的方法都会调用AbstractStringBuilder中的公共方法,如super.append(...)。只是StringBuffer会在方法上加synchronized关键字,进行同步。 

 六、StringBuffer线性安全(同步),平常推荐使用StringBuffer,也有当程序不是多线程的时候推荐使用StringBuilder,因为StringBuilder更有效率。

补充知识:

 抽象类与接口的其中一个区别是:抽象类中可以定义一些子类的公共方法,子类只需要增加新的功能,不需要重复写已经存在的方法;而接口中只是对方法的申明和常量的定义。

 

字符串类

字符串是字符的序列。在 Java 中,字符串无论是常量还是变量都是用类的对象来实现的。java.lang 提供了三种字符串类:String 类和 StringBuffer 类、StringBuilder类。

1.String
按照 Java 语言的规定,String 类是 immutable 的 Unicode 字符序列,其作用是实现一种不能改变的静态字符串。例如,把两个字符串连接起来的结果是生成一个新的字符串,而不会使原来的字符串改变。实际上,所有改变字符串的结果都是生成新的字符串,而不是改变原来字符串。

字符串与数组的实现很相似,也是通过 index 编号来指出字符在字符串中的位置的,编号从0 开始,第 2 个字符的编号为 1,以此类推。如果要访问的编号不在合法的范围内,系统会产生 StringIndexOutOfBoundsExecption 异常。如果 index 的值不是整数,则会产生编译错误。

String 类提供了如表 所示的几种字符串创建方法。

 String 创建字符串的方法

方法

功能

String s=”Hello!”

用字符串常量自动创建 String 实例。

String s=new String(String s)

通过 String 对象或字符串常量传递给构造方法。

public String(char value[])

将整个字符数组赋给 String 构造方法。

public String(char value[], int offset, int count)

将字符数组的一部分赋给 String 构造方法,offset 为起始下标,count为子数组长度。


2.StringBuffer
String 类不能改变字符串对象中的内容,只能通过建立一个新串来实现字符串的变化。如果字符串需要动态改变,就需要用 StringBuffer 类。StringBuffer 类主要用来实现字符串内容的添加、修改、删除,也就是说该类对象实体的内存空间可以自动改变大小,以便于存放一个可变的字符序列。

StringBuffer 类提供的三种构造方法

构造方法

说明

StringBuffer()

使用该无参数的构造方法创建的 StringBuffer 对象,初始容量为 16 个字符,当对象存放的字符序列大于 16 个字符时,对象的容量自动增加。该对象可以通过 length()方法获取实体中存放的字符序列的长度,通过 capacity()方法获取当前对象的实际容量。

StringBuffer(int length)

使用该构造方法创建的 StringBuffer 对象,其初始容量为参数 length 指定的字符个数,当对象存放的字符序列的长度大于 length 时,对象的容量自动增加,以便存放所增加的字符。

StringBuffer(Strin str)

使用该构造方法创建的 StringBuffer 对象,其初始容量为参数字符串 str 的长度再加上 16 个字符。

 

几种 StringBuffer 类常用的方法

方法

说明

append()

使用 append() 方法可以将其他 Java 类型数据转化为字符串后再追加到 StringBuffer 的对象中。

insert(int index, String str)

insert() 方法将一个字符串插入对象的字符序列中的某个位置。

setCharAt(int n, char ch)

将当前 StringBuffer 对象中的字符序列 n 处的字符用参数 ch 指定的字符替换,n 的值必须是非负的,并且小于当前对象中字符串序列的长度。

reverse()

使用 reverse()方法可以将对象中的字符序列翻转。

delete(int n, int m)

从当前 StringBuffer 对象中的字符序列删除一个子字符序列。这里的 n 指定了需要删除的第一个字符的下标,m 指定了需要删除的最后一个字符的下一个字符的下标,因此删除的子字符串从 n~m-1。

replace(int n, int m, String str)

用 str 替换对象中的字符序列,被替换的子字符序列由下标 n 和 m 指定。

 

 

 

 

© 著作权归作者所有

共有 人打赏支持
好兄弟
粉丝 0
博文 7
码字总数 4017
作品 0
桂林
私信 提问
Java的字符类String、StringBuffer与StringBuilder异同对比分析

Java的字符类String、StringBuffer与StringBuilder异同对比分析 Java String是一个“不可变常量字符串”对象,final属性定义。之所以这么说,是从String内部在盛放字符串时候的容器char数组而...

开开心心过
2017/10/30
0
0
String、StringBuilder、StringBuffer 用法比较

String、StringBuilder、StringBuffer 三个类源自JDK的 java/lang/ 目录下: String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全,JDK 5.0(1.5.0...

长平狐
2013/01/06
119
0
【翻译】Java中String, StringBuffer, StringBuilder的区别

String 是 Java 中最重要的类之一,并且任何刚开始做Java编程的人,都会用String定义一些内容,然后通过著名的System.out.println()语句来打印出来。 然而,很多Java新手都不会意识到 String...

YuanyuanL
2014/09/03
0
4
深入理解 String, StringBuffer 与 StringBuilder 的区别

String 字符串常量 StringBuffer字符串变量(线程安全) StringBuilder字符串变量(非线程安全) 简要的说, String 类型和StringBuffer类型的主要性能区别其实在于 String 是不可变的对象,...

大数据之路
2013/01/16
0
0
(转)StringBuilder与StringBuffer和String 的区别

很多人对String和StringBuffer的区别已经很了解了吧,可能还有人对这两个类的工作原理有些不清楚的地方,复习一下吧,顺便牵出J2SE 5.0(文档)里面带来的一个新的字符操作的类StringBuilder...

王振威
2012/03/08
0
1

没有更多内容

加载失败,请刷新页面

加载更多

Spring源码学习笔记-1-Resource

打算补下基础,学习下Spring源码,参考书籍是《Spring源码深度解析》,使用版本是Spring 3.2.x,本来想试图用脑图记录的,发现代码部分不好贴,还是作罢,这里只大略记录下想法,不写太细了 ...

zypy333
今天
10
0
RestClientUtil和ConfigRestClientUtil区别说明

RestClientUtil directly executes the DSL defined in the code. ConfigRestClientUtil gets the DSL defined in the configuration file by the DSL name and executes it. RestClientUtil......

bboss
今天
17
0

中国龙-扬科
昨天
2
0
Linux系统设置全局的默认网络代理

更改全局配置文件/etc/profile all_proxy="all_proxy=socks://rahowviahva.ml:80/"ftp_proxy="ftp_proxy=http://rahowviahva.ml:80/"http_proxy="http_proxy=http://rahowviahva.ml:80/"......

临江仙卜算子
昨天
10
0
java框架学习日志-6(bean作用域和自动装配)

本章补充bean的作用域和自动装配 bean作用域 之前提到可以用scope来设置单例模式 <bean id="type" class="cn.dota2.tpye.Type" scope="singleton"></bean> 除此之外还有几种用法 singleton:......

白话
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部