开发者学堂课程【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 类对象引用传递
大部分情况下不是会出现改变字符串的内容,这种改变指的并不是针对于静态常量池的改变。
范例:分析一下已有问题.
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 之后提供的,不属于线程安全的操作。