JavaSE|StringBuffer


StringBuffer是线程安全的可变字符串。

StringBuffer和String的区别:
StringBuffer长度和内容可变,String不可变。
如果使用StringBuffer做字符串拼接,不会浪费太多的资源。


构造方法

1. public StringBuffer() 最常用
无参构造方法。其初始容量为 16 个字符。

super(16);

2. public StringBuffer(int capacity)
指定容量的字符串缓冲区对象。

super(capacity);

3. public StringBuffer(String str)
指定字符串内容的字符串缓冲区对象。

super(str.length() + 16);

添加功能

1. public StringBuffer append(String str)
可以把任意类型数据添加到字符串缓冲区,并返回字符串缓冲区本身。

		StringBuffer sb = new StringBuffer();

		// public StringBuffer append(String str)
		StringBuffer sb2 = sb.append("hello");
		System.out.println("sb:" + sb);  //hello
		System.out.println("sb2:" + sb2); //hello
		System.out.println(sb == sb2); // true(说明没有重新开空间)
		StringBuffer sb = new StringBuffer();		
		//可以添加任意类型的数据
		// 链式编程
		sb.append("hello").append(true).append(12).append(34.56);
		System.out.println("sb:" + sb); //hellotrue1234.56

		sb.insert(5, "world");
		System.out.println("sb:" + sb); //helloworldtrue1234.56

2. public StringBuffer insert(int offset,String str)
在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身


删除功能

1. public StringBuffer deleteCharAt(int index)
删除指定位置的字符,并返回本身


		StringBuffer sb = new StringBuffer();

		// 添加功能
		sb.append("hello").append("world").append("java");
		System.out.println("sb:" + sb);

		sb.deleteCharAt(1); // hlloworldjava
		// 删除第一个l这个字符
		sb.deleteCharAt(1); //hloworldjava

2. public StringBuffer delete(int start,int end)
删除指定位置开始指定位置结束(包左不包右)的内容,并返回本身


		StringBuffer sb = new StringBuffer();

		// 添加功能
		sb.append("hello").append("world").append("java");
		System.out.println("sb:" + sb);

		// 删除world这个字符串
		// sb.delete(5, 10); 

		// 删除所有的数据
		sb.delete(0, sb.length());

替换功能

1. public StringBuffer replace(int start,int end,String str)

		StringBuffer sb = new StringBuffer();
		sb.append("hello");
		sb.append("world");
		sb.append("java");
		System.out.println("sb:" + sb); //helloworldjava

		// 把world这个数据替换为"节日快乐"
		sb.replace(5, 10, "节日快乐");
		System.out.println("sb:" + sb); //hello节日快乐java

反转功能

1. public StringBuffer reverse()
将此字符序列用其反转形式取代

		StringBuffer sb = new StringBuffer();

		sb.append("霞青林爱我");
		System.out.println("sb:" + sb); //霞青林爱我

		sb.reverse();
		System.out.println("sb:" + sb); //我爱林青霞
	}

截取功能

1. public String substring(int start)
2. public String substring(int start,int end)

注意截取功能的返回值类型不再是StringBuffer本身。

		StringBuffer sb = new StringBuffer();
		
		sb.append("hello").append("world").append("java");
		System.out.println("sb:" + sb);

		// 截取功能
		// public String substring(int start)
		String s = sb.substring(5);
		System.out.println("s:" + s);   //worldjava
		System.out.println("sb:" + sb); //helloworldjava

		// public String substring(int start,int end)
		String ss = sb.substring(5, 10);
		System.out.println("ss:" + ss); //world
		System.out.println("sb:" + sb); //helloworldjava

StringBuffer 和 String 的相互转换

String 转 StringBuffer

1. public StringBuffer(String str) 建议
2. public StringBuffer append(String str)

	String s = "hello";
	StringBuffer sb = new StringBuffer(s);
	StringBuffer sb1 = new StringBuffer();
	sb.append(s);

StringBuffer 转 String

1. public String(StringBuffer buffer)
2. public String toString() 建议

    StringBuffer buffer = new StringBuffer("java");
    String str = new String(buffer);
    String str1 = buffer.toString();

StringBuilder和StringBuffer

StringBuilder是一个可变的字符序列。提供一个与 StringBuffer 兼容的 API,但不保证同步。被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快

面试题

1.String, StringBuffer, StringBuilder的区别?
A:String是内容不可变的,而StringBuffer和StringBuilder都是内容可变的。
B:StringBuffer是同步的,数据安全(多线程情况下),效率低;StringBuilder是不同步的,数据不安全(多线程情况下),效率高。

2.StringBuffer和数组的区别?
二者都可以看做容易,装其他数据。
但是StringBuffer的数据最终是一个字符串数据;而数组可以放置多种数据,但必须是同一数据类型的。

**3.**String和StringBuffer作为参数传递

public class StringBufferDemo {
	public static void main(String[] args) {
		String s1 = "hello";
		String s2 = "world";
		System.out.println(s1 + "---" + s2);// hello---world
		change(s1, s2);
		System.out.println(s1 + "---" + s2);// hello---world

		StringBuffer sb1 = new StringBuffer("hello");
		StringBuffer sb2 = new StringBuffer("world");
		System.out.println(sb1 + "---" + sb2);// hello---world
		change(sb1, sb2);
		System.out.println(sb1 + "---" + sb2);// hello---worldworld

	}

	public static void change(StringBuffer sb1, StringBuffer sb2) {
		sb1 = sb2;
		sb2.append(sb1);
	}

	public static void change(String s1, String s2) {
		s1 = s2;
		s2 = s1 + s2;
	}
}
  1. 对基本类型,形式参数的改变不影响实际参数。
  2. 对引用类型,形式参数的改变直接影响实际参数。
  3. String作为参数传递,效果和基本类型作为参数传递是一样的。
  4. StringBuffer作为参数传递,赋值操作不影响实际参数的值,但append()方法会影响。对StringBuffer不要随便用赋值操作。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值