java基础类库StringBuffer类

java基础类库StringBuffer类

StringBuffer类

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

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

虽然String类很好用,但是我们发现它也有弊端,就是内容不允许频繁修改,所以为了解决问题,我们提供了StringBuffer类

StringBuffer 并不像String类那样拥有两种实例化方法,必须要想普通方法一样调用方法,这个时候可以考虑一下方法

  • 构造方法:public StringBuffer();
  • 数据追加:public StringBuffer append(数据类型、变量),相当于字符串中的“+”操作;
  • 构造方法:public StringBuffer(String str),相当于初始化

范例:观察String与StringBuffer对比
String类对象引用传递

public class JavaAPIDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String str ="hello";
		change(str);
		System.out.println(str);
	}
	public static void change(String temp) {
		temp+="word";
	}

}

在这里插入图片描述
str内的值没有发生改变

StringBuffer类对象引用传递

public class JavaAPIDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		StringBuffer buf =new StringBuffer("Hello  ");
		change(buf);
		System.out.println(buf);
	}
	public static void change(StringBuffer temp) {
		temp.append("World");
	}

}

在这里插入图片描述
buf内的值发生了改变
由此可见String内的值不能改变,StringBuffer内的值可以改变,这就是两这最主要的区别

实际上大部分的情况下,很少会出现有字符串内容的改变,这种改变指的并不是针对静态常量池的改变;
范例:分析一下已有问题

public class JavaAPIDemo {

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

}

在这里插入图片描述
在这个时候strB对象里面的内容并不是真正改变,或者更严格的将,对于现在的strB当程序编译的时候就相当于下面形式

buf.append(“www.”).append(“baidu.”).append(“com”);

也就是说所有的”+“在我们编译后都变为了StringBuffer中的append()方法,并且在程序中String类对象和StringBuffer类对象本来就可以互相转换

  • String类对象变为StringBuferr可以依靠StringBuffer类构造方法或者使用append()方法
  • 所以类的对象都可以通过toString()方法将其变为String类型

在StringBuffer类里面除了可以支持字符串内容修改之外,实际上也添加了很多String所不具有的方法

  • 插入数据:public StringBuffer insert(int offest,boolean b);
public class JavaAPIDemo {

	public static void main(String[] args) {
	
	StringBuffer buf=new StringBuffer();
	buf.append(".com").insert(0,"www.").insert(4, "baidu");
	System.out.println(buf);
	}

}

在这里插入图片描述

  • 删除指定范围的数据:public StringBuffer delete(int start,int end);
public class JavaAPIDemo {

	public static void main(String[] args) {
	
	StringBuffer buf=new StringBuffer();
	buf.append("Hello World!").delete(6, 12);
	System.out.println(buf);
	}

}

在这里插入图片描述
-字符串内容反转:public StringBuffer reverse();

public class JavaAPIDemo {

	public static void main(String[] args) {
	
	StringBuffer buf=new StringBuffer();
	buf.append("Hello World!");
	System.out.println(buf.reverse());
	}

}

在这里插入图片描述
实际上与StringBuffer类还有一个类似的功能类:StringBuilder类,这个类是在JDK1.5之后提供的,该类中提供的方法与StringBuffer类相同,区别在于StringBuffer类中的方法属于线程安全的,全都使用了synchronized关键字进行标注,而StringBuilder类属于非线程安全的

面试题:请解释String、StringBuffer、StringBuilder的主要区别?

  • String类是字符串的首选类型,其最大的特点是内容不允许修改;
  • StringBuffer与StringBuilder类的内容允许修改;
  • StringBuffer是在JDK1.0的时候提供的,属于线程安全操作,而StringBuilder是在JDK1.5的时候提供的不是线程安全操作
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

样子的木偶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值