天天看点

StringBuffer 类|学习笔记

开发者学堂课程【Java 高级编程: StringBuffer 类】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:

https://developer.aliyun.com/learning/course/20/detail/302

StringBuffer 类

String类 是在所有项目开发之中一定会使用到的一个功能类,并且这个类拥有如下的特点:

每一个字符串的常量都属于一个 String 类的匿名对象,并且不可更改

String 有两个常量池:静态常量池、运行时常量池

String 类对象实例化建议使用直接赋值的形式完成,这样可以直接将对象保护在对象池中以下次重用

String 类的弊端:

内容不允许修改

为了解决此问题,专门提供有一个 StringBuffer 类可以实现字符串的内容修改

StringBuffer 并不像 String 类那样拥有两种对象实例化方式,StringBuffer 必须像.普通类对象那样,首先进行对象的实例化,而后才可以调用方法执行处理,而这个时候可以考虑使用 StringBuffer 类中的如下方法:.

构造方法: ​​

public StringBuffer(); 、

构造方法: ​

public StringBuffer(String str)

​,接收初始化字符串内容;.

数据追加: ​

public StringBuffer append

(数据类型变量),相当于字符串中的“+”操作;

范例:观察 String 与 StringBuffer 对比:

String 类对象引用传递             

StringBuffer 类|学习笔记

StringBuffer 类对象引用传递

StringBuffer 类|学习笔记

大部分情况下不是会出现改变字符串的内容,这种改变指的并不是针对于静态常量池的改变。

范例:分析一下已有问题.

package cn.mldn.demo;

public class JavaAPIDemo 

​​

{

public static void main(String[] args) 

{

String strA = "www.mldn.cn";

String

strB

  =  

"www."+"mldn"

+

"

.cn

"

;

System.out.println(strA == strB);

}

注:这个时候的 strB 对象的内容并不算是改变,严格的意义上来讲,对于现在的 strB 当程序编译之后会变为如下的形式:

package cn.mldn.demo; 

public class JavaAPIDemo 

{

public static void main(String[] args) 

{

String strA = "www. mldn.cn" ;

String strB = "www." +"mldn'+ ".cn";

System. out. println(strA == strB);

StringBuffer buf = new StringBuffer() ;

buf

A

append("www.")

A

append("mldn").append(".cn");

注:所有的“+”在编译之后都变为了 StringBuffer 中的 append() 方法,并且在程序之中 StringBuffer 与 String 类对象之间可以直接相互转换:

String 类对象变为 StringBuffer 可以依靠 StringBuffer 类的构造方法或者使用append 方法

所有类对象都可以通过 toString() 方法将其变为 String 类型

在 StringBuffer 类里面除了可以支持有字符串内容的修改之外,实际上也提供有了一些 String 类所不具备的方法。

1. 插入数据:

public StringBuffer insert(int offset,数据类型 b):

package cn.mldn

.

demo;

public class JavaAPIDemo 

{

public static void main(String[] args) 

{

StringBuffer buf = new StringBuffer();

buf

.

append("cn").insert(e,"www.") insert(4,"mldn");

System.out

.

println(buf);

2. 删除指定范围的数据:

package cn.mldn.demo;

public class JavaAPIDemo 

{

public staticvoid main(String[] args) 

{

StringBuffer buf = new StringBuffer();

buf.append("Hello World !").delete(6,12). insert(6,"MLDN");

System.out.println(buf);

}

3. 字符串内容反转:

package cn.mldn.demo;

public class JavaAPIDemo 

{

public staticvoidmain(String[] args) 

{

StringBuffer buf =ew StringBuffer();

buf append( "Hello World !");

System out println(buf reverse());

注:实际上与 StringBuffer 类还有一个类似的功能类: StringBuilder 类.这个类是在 JDK1.5 的时候提供的,该类中提供的方法与 StringBuffer 功能相同,最大的区别在于 StringBuffer 类中的方法属于线程安全的,全部使用了 synchronized 关键字进行标注,而 StringBuilder 类属于非线程安全的。

4. String、StringBuffer、StringBuilder 的区别:

String 类是字符串的首选类型,其最大的特点是内容不允许修改;

StringBuffer '与 StringBuilder 类的内容允许修改;

StringBuffer 是在 JDK 1.0 的时候提供的,属于线程安全的操作,而 StringBuilder 是在 JDK 1.5 之后提供的,不属于线程安全的操作。