Java——StringBuffer

String类实在大部分项目开发中都会使用到的一个功能类,并且这个类有如下的特点:
  1.每个字符串的常量都属于一个String类的匿名对象;
  2.String类有两个常量池:静态常量池、运行时常量池;
  3.String类对象实例化建议使用直接赋值的形式完成,这样可以直接将对象保存在对象池中以方便下次使用;
  4.但是如果认真去思考也会发现其最大的弊端:内容不允许修改,虽然大部分的情况下都不会涉及到字符串内容的频繁修改,但是依然可能会存在这样的情况,所以为了解决此问题专门提供一个StringBuffer类可以实现字符串内容的修改处理。
  5.StringBuffer类不像String类那样拥有两种对象实例化方法,StringBuffer类必须像普通类那样先进行对象实例化,才可以调用方法进行处理。而这时可以考虑使用StringBuffer类中的如下方法:
    1. 构造方法: public StringBuffer();
    2. 构造方法: public StringBuffer(); // 接受初始化字符串内容
    3. 数据追加: public StringBuffer append(数据类型 变量);// 相当于字符串的’+’;

String类StringBuffer类对比

String类对象引用传递StringBuffer类引用传递
见代码TestDemo1见代码TestDemo2
public class TestDemo1 {
	public static void main( String[] args ) {
		String str = "Hello";
		System.out.println("调用方法前的str值:" + str);
		change(str);
		System.out.println("调用方法后的str值:" + str);
	}
	public static void change( String temp ) {  // 并不能改变str的值
		temp += "World!";  
	}
}
//输出如下:
调用方法前的str值:Hello
调用方法后的str值:Hello
public class TestDemo2 {
	public static void main( String[] args ) {
		StringBuffer buf = new StringBuffer("Hello");
		System.out.println("调用方法前的str值:" + buf);
		change(buf);
		System.out.println("调用方法后的str值:" + buf.toString());
	}
	public static void change( StringBuffer temp ) {  // 改变了buf的值
		temp.append("World!");  
	}
}
//输出如下:
调用方法前的str值:Hello
调用方法后的str值:HelloWorld!



StringBuffer类的几个方法:

	1、插入数据:public StringBuffer insert(int offset, 数据类型 b);
public class TestDemo {
	public static void main( String[] args ) {
		StringBuffer buf = new StringBuffer("Hi World!!!");
		System.out.println("调用方法前的str值:" + buf);
		buf.insert(3, 3.14159);  // 在第三个数据插入 ,H为0,i为1,空格为2,W为3,故而在W的位置插入
		System.out.println("调用方法后的str值:" + buf.toString());
	}
}
//输出如下:
调用方法前的str值:Hi World!!!
调用方法后的str值:Hi 3.14159World!!!
	2、删除指定范围的数据:public StringBuffer delete(int start, int end);
public class TestDemo {
	public static void main( String[] args ) {
		StringBuffer buf = new StringBuffer("Hi World!!!");
		System.out.println("调用方法前的str值:" + buf);
		buf.delete(1, 3);  // 删除指定范围,实质范围为[1,3),也就是说只包括1,2而不包括3.
		System.out.println("调用方法后的str值:" + buf.toString());
	}
}
//输出如下:
调用方法前的str值:Hi World!!!
调用方法后的str值:HWorld!!!
	3.倒置:public StringBuffer reverse​();
public class TestDemo {
	public static void main( String[] args ) {
		StringBuffer buf = new StringBuffer("Hi World!!!");
		System.out.println("调用方法前的str值:" + buf);
		StringBuffer x = buf.reverse();
		System.out.println("调用方法后的str值:" + buf.toString());
		System.out.println("x值:" + x);
		// 利用toString()方法输出和直接使用StringBuffer变量无区别;
	}
}
//输出如下:
调用方法前的str值:Hi World!!!
调用方法后的str值:!!!dlroW iH
x值:!!!dlroW iH
	4.添加CodePoint:public StringBuffer appendCodePoint​(int codePoint);
		与普通append无区别,只是加入的是codePoint所对应的char,通过ASCII表
public class TestDemo {
	public static void main( String[] args ) {
		StringBuffer buf = new StringBuffer("Hi World!!!");
		System.out.println("调用方法前的str值:" + buf);
		buf.appendCodePoint(74);
		System.out.println("调用方法后前的str值:" + buf);
		buf.appendCodePoint(75);
		System.out.println("再次调用方法后前的str值:" + buf);
	}
}
//输出如下:
调用方法前的str值:Hi World!!!
调用方法后前的str值:Hi World!!!J
再次调用方法后前的str值:Hi World!!!JK

PS1:实际上还有一个与StringBuffer类相似的功能类:StringBuilder类,这个类是在JDK1.5的时候提供的,该类中提供的方法与StringBuffer功能相同。最大的区别在于StringBuffer类中的方法属于线程安全,全部使用了synchronized关键字进行标注,StringBuilder类属于非线程安全;
看题:
  请解释StringStringBufferStringBuilder的区别?
  1.String类是字符串的首选类型,其最大的特点是不允许修改;
  2.StringBuffer类与StringBuilder类的内容允许修改;
  3.StringBuffer类实在JDK1.0的时候提供的属于线程安全操作,而StringBuilder类是在JDK1.5之后提供的属于非线程安全操作;
PS2:有什么出错的地方还望各位看官麻烦指出,感激不尽。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值