文档章节

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

好兄弟
 好兄弟
发布于 2017/02/16 08:46
字数 1415
阅读 25
收藏 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
【翻译】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
《Java从小白到大牛》之第9章 字符串

《Java从小白到大牛》纸质版已经上架了!!! 由字符组成的一串字符序列,称为“字符串”,在前面的章节中也多次用到了字符串,本章将重点介绍。 Java中的字符串 {#java} Java中的字符串是由...

tony关东升
07/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

992. Sort Array By Parity II - LeetCode

Question 992. Sort Array By Parity II Solution 题目大意:给一个int数组,一半是奇数一半是偶数,分别对偶数数和奇数数排序并要求这个数本身是偶数要放在偶数位上 思路:把奇数数和偶数数...

yysue
17分钟前
1
0
Snackbar源码分析

目录介绍 1.最简单创造方法 1.1 Snackbar作用 1.2 最简单的创建 1.3 Snackbar消失的几种方式 2.源码分析 2.1 Snackbar的make方法源码分析 2.2 对Snackbar属性进行设置 2.3 Snackbar的show显示...

潇湘剑雨
49分钟前
1
0
分布式作业系统 Elastic-Job-Lite 源码分析 —— 作业数据存储

分布式作业系统 Elastic-Job-Lite 源码分析 —— 作业数据存储 摘要: 原创出处 http://www.iocoder.cn/Elastic-Job/job-storage/ 本文基于 Elastic-Job V2.1.5 版本分享 1. 概述 本文主要分享...

DemonsI
55分钟前
1
0
jmockit demo

1、@Mocked,标识一个指定的class的实例或被测对象的参数被Mock掉。 2、@Capturing,标识一个被Mock的对象,从该对象派生的子类也被Mock了。 3、@Injectable,标识只有一个指定的被测对象的内...

我的老腰啊
今天
1
0
内容换行

用 <textarea>13611112222 这里想换行 13877779999</textarea><textarea>13611112222 13877779999</textarea>...

小黄狗
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部