04.JavaAPI(StringBuffer类和StringBuilder类)

String、StringBuffer、StringBuilder这三个类都可以用来定义字符串变量,但是都存在区别。

  1. String-不可变字符串,其本质就是字符数组
  2. StringBuffer-可变字符串、效率低、线程安全
  3. StringBuilder-可变字符串序列、效率高、线程不安全

一、StringBuffer类

线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。

可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。

StringBuffer 上的主要操作是 appendinsert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符添加或插入到字符串缓冲区中。append 方法始终将这些字符添加到缓冲区的末端;而 insert 方法则在指定的点添加字符。

二、StringBuilder类

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

StringBuilder 上的主要操作是 appendinsert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符添加或插入到字符串生成器中。append 方法始终将这些字符添加到生成器的末端;而 insert 方法则在指定的点添加字符。

三、StringBuffer类和StringBuilder类常用方法

StringBuffer() //构造一个其中不带字符的字符串缓冲区,初始容量为 16 个字符。 
StringBuffer(CharSequence seq) //构造一个字符串缓冲区,它包含与指定的 CharSequence 相同的字符。 

StringBuilder() //构造一个其中不带字符的字符串生成器,初始容量为 16 个字符。 
StringBuilder(CharSequence seq) //构造一个字符串生成器,包含与指定的 CharSequence 相同的字符。 

public StringBuffer append(数据类型 b)//提供了很多的append()方法,用于进行字符串连接
public StringBuffer delete(int start,int end)//删除指定位置的内容
public StringBuffer insert(int offser,数据类型 b)// 在指定位置上增加一个内容
public StringBuffer replace(int start,int end,String str)//将指定范围的内容替换成其他内容
public StringBuffer reverse()//字符串翻转
package com.zking.test;

public class StringBufferAndStringBuilderDemo {
	public static void main(String[] args) {
		
		StringBuffer sb = "sb"; 不能直接定义
		StringBuffer sb = new StringBuffer("我是谁");
		System.out.println(sb);
		
		StringBuffer sb = new StringBuffer("我是谁");
		//sb的类型:StringBuffer类型
		//需求:StringBuffer类型---》String类型
		String str = sb.toString();//永远不要记等于符号左边的代码 ctrl+1
		System.out.println(str);
		//需求:String类型--->StringBuffer类型
		String name = "dengyankang";
		//通过构造函数直接可以转换
		StringBuffer sb2 = new StringBuffer(name);
		
		//与String不一样的方法有以下几个
//		append  末尾追加内容
		StringBuffer sb = new StringBuffer("dengyankang");
		sb.append("liuxiangyang");
		System.out.println(sb);
		
//		insert 在指定的索引位置处添加指定的内容
		sb.insert(2, "王家庆");
		System.out.println(sb);
		
//		delete删除
		sb.delete(2, 5);
		System.out.println(sb);
		
//		替换  区间替换
		sb.replace(0, 4, "tang");
		System.out.println(sb);
		
		
//		反转   倒过来输出
		sb.reverse();
		System.out.println(sb);
		
		StringBuilder sb2 = new StringBuilder();
	}
}

四、String、StringBuffer、StringBiulder的区别

  1. String 是不可变的,而 StringBuffer 和 StringBuilder 是可变类。
  2. StringBuffer 是线程安全和同步的,而 StringBuilder 不是。这就是 StringBuilder 比 StringBuffer 快的原因。
  3. 字符串连接运算符 (+) 在内部使用 StringBuilder 类。
  4. 对于非多线程环境中的字符串操作,我们应该使用 StringBuilder 否则使用 StringBuffer 类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

淡独东执

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

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

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

打赏作者

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

抵扣说明:

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

余额充值