StringBuffer类
发布日期:2021-05-07 09:11:27 浏览次数:22 分类:精选文章

本文共 2406 字,大约阅读时间需要 8 分钟。

StringBuffer类

String特点:

  • 每一个字符串的常量都属于一个String类的匿名对象,并且不可更改。
  • String有两个常量池:静态常量池、运行时常量池
  • String类对象实例化建议使用直接赋值的形式完成,可以直接将对象保存在对象池之中方便下次重用。

弊端:内容部不允许修改

解决方案:StringBuffer类

 

范例:来观察String与StringBuffer类的对比

//String类public class StringDemo{	public static void main(String[] args) {		String str  = "Hellow";		change(str);		System.out.println(str);	}	public static void change(String temp) {		temp += "Word!";	}}

Hellow

结果并未改变

String必须像普通对象一样进行实例化才可以进行处理

  • 构造方法:public StringBuffer();
  • 数据追加:public StringBuffer append(数据类型 变量),相当于字符串中的“+”。
//StringBuffer类public class StringBufferDemo {	public static void main(String[] args) {		StringBuffer stringbuffer  = new StringBuffer("Hellow");		change(stringbuffer);		System.out.println(stringbuffer.toString());	}	public static void change(StringBuffer temp) {		temp.append(" Word!");	}}

Hellow Word!

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

public class Demo {	public static void main(String[] args) {		String strA = "www.baidu.com";		String strB = "www."+"baidu"+".com";		System.out.println(strA == strB);	}}

true

注意:这种形式并不算改变,编译之后strB与strA的内容是一样的,String在编译时的变化如下:

String strA = "WWW."+"BAIDU"+".COM";//在编译运行时的情况StringBuffer buf = new StringBuffer();buf.append("WWW.").append("BAIDU").append(".COM")

String与StingBuffer之间本来就可以互相转换,“+”等同“append()”

  • String类变为StringBuffer可以依靠StringBuffer类的构造方法或者append()方法
  • 所有的对象都可以通过toString()方法变为字符串

String类不具备但StringBuffer具备的方法:

  • insert(int 脚标,数据类型 内容):在指定的脚标位置插入指定内容
public static void main(String[] args) {		StringBuffer buf = new StringBuffer();		buf.append(".com").insert(0, "www.").insert(4, "baidu");		System.out.println(buf);	}

 www.baidu.com

  • delete(int 开始脚标,int 结束脚标):删除范围的数据
public static void main(String[] args) {    StringBuffer buf = new StringBuffer();    buf.append(".com").insert(0, "www.").insert(4, "baidu").delete(4, 9);    System.out.println(buf);}

 www..com

  • reverse():String内容反转
public class StringBuffer类 {	public static void main(String[] args) {		StringBuffer buf = new StringBuffer();		buf.append(".com").insert(0, "www.").insert(4, "baidu").reverse();		System.out.println(buf);	}

moc.udiab.www

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

面试题:解释String、StringBuffer与StringBuider的区别?

  • String类是字符串的首选类型,其最大的特点是内容不允许修改
  • StringBuffer与StringBuider类的内容允许修改
  • StringBuffer是在JDK1.0提供的,属于线程安全的操作,StringBuider是在JDK1.5提供的,属于非线程安全操作。
上一篇:(JAVA常用类库)CharSequence接口
下一篇:多线程案例分析三

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2025年04月08日 09时30分36秒