SringBuffer与StringBuilder类

本文详细解析了StringBuffer类的构造方法、核心功能如添加、删除和替换,以及与String和StringBuilder的对比,强调了线程安全性和内存管理。涵盖了实例演示和关键知识点,适合学习Java字符串处理的开发者。
摘要由CSDN通过智能技术生成

SringBuffer类

StringBuffer类的概述

一.概述

  • 通过JDK提供的API,查看StringBuffer类的说明
  • 线程安全的可变字符序列

二.StringBuffer和String的区别

  • String是一个不可变的字符序列
  • StringBuffer是一个可变的字符序列

StringBuffer的构造成员方法

一.StringBuffer的构造方法

  • public StringBuffer():无参构造方法
  • public StringBuffer(int capacity):指定容量的字符串缓冲区对象
  • public StringBuffer(String str):指定字符串内容的的字符串缓冲区对象

二.StringBuffer的方法

  • public int capacity():返回当前容量,理论值
  • public int length():返回长度(字符数),实际值

案例演示


public class Demo1_StringBuffer {
	public static void main(String[] args) {
		StringBuffer sb = new StringBuffer();
		System.out.println(sb.length());                  //容器中的字符个数,实际值
		System.out.println(sb.capacity());               //容器中的初始容量,理论值
		
		StringBuffer sb2 = new StringBuffer(10);
		System.out.println(sb2.length());                  
		System.out.println(sb2.capacity());
		
		StringBuffer sb3 = new StringBuffer("heima");  //不占初始容量,扩充初始容量
		System.out.println(sb3.length());                 //实际字符的个数
		System.out.println(sb3.capacity());             //字符串的length + 初始容量
   }
}

StringBuffer的添加功能

一.public StringBuffer append(String str)

  • 可以把任意类型数据添加到字符缓冲区里面,并返回字符缓冲区本身

二.public StringBuffer insert(int offset,String str)

  • 在指定位置把任意类型的数据插入到字符缓冲区里面,并返回字符串缓冲区本身

补充

StringBuffer是字符缓冲区,当new的时候是在堆内存创建一个对象,底层是一个长度为16的字符数组
当调用添加方法时,不会再重新创建对象,在不断向原缓冲区添加字符

案例演示


public class Demo2_StringBuffer {
	public static void main(String[] args) {
		demo1();
		StringBuffer sb = new StringBuffer("1234");
		sb.insert(3, "heima");           //在指定位置添加元素
		System.err.println(sb);          //如果没有指定位置索引就会报索引越界异常
	}

	private static void demo1() {
		StringBuffer sb = new StringBuffer();
		StringBuffer sb2 = sb.append(true);
		StringBuffer sb3 = sb.append(10);
		StringBuffer sb4 = sb.append("heima");
		
		System.out.println(sb.toString());   //StringBuffer类中重写了toString()方法
		System.out.println(sb2.toString());
		System.out.println(sb3.toString());
		System.out.println(sb4.toString());
	}
}

StringBuffer的删除功能

一.public StringBuffer deleteCharAt(int index)

  • 删除指定位置的字符,并返回本身

二.public StringBuffer delete(int start,int end)

  • 删除从指定位置开始到指定位置结束的内容(左闭右开),并返回本身

案例演示


public class Demo3_StringBuffer {
	public static void main(String[] args) {
		StringBuffer sb = new StringBuffer();
		sb.deleteCharAt(5);               //当缓冲区这个索引上没元素时就会报
		                                  //StringIndexOutOfBoundException错误
		sb.append("heima");
		sb.deleteCharAt(4);               //根据索引删除掉索引位置上对应的字符
		System.out.println(sb);
		sb.delete(0, 2);                  //包含头不包含尾
		System.out.println(sb);
		sb.delete(0, sb.length());        //清空缓冲区
		System.out.println(sb);
		
		sb = new StringBuffer();          //不要用这种方法清空缓冲区,原来的会变成垃圾,浪费内存  
		System.out.println(sb);
	}
}

StringBuffer的替换反转功能

一.StringBuffer的替换功能

  • public StringBuffer replace(int start,int end,String str):从start开始到end用str替换

二.StringBuffer的反转功能

  • public StringBuffer reverse():反转字符串

案例演示

public class Demo4_StringBuffer {
	public static void main(String[] args) {
		StringBuffer sb = new StringBuffer("heima");
		StringBuffer sb2 = new StringBuffer("爸爸的爸爸是爷爷");
		sb.replace(0, 3, "bai");
		System.out.println(sb);
		
		sb2.reverse();
		System.out.println(sb2);
	}
}

StringBuffer的截取功能及注意事项

一.StringBuffer的截取功能

1.public String substring(int start):

  • 从指定位置截取到末尾

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

  • 截取从指定位置开始到结束位置,包括开始,不包括结束

二.注意事项

  • 返回值类型不再是StringBuffer本身,为String类型

案例演示


public class Demo5_StringBuffer {
	public static void main(String[] args) {
		StringBuffer sb = new StringBuffer("woaiheima");
		String str = sb.substring(4);
		System.out.println(str);
		System.out.println(sb);    //sb没变,知识产生了一个新的字符串
		
		String str2 = sb.substring(4, 7);
		System.out.println(str2);
	}
}

StringBuffer与String的相互转换

一.String —> StringBuffer

  • 通过构造方法
  • 通过append()方法

二.StringBuffer —> String

  • 通过构造方法
  • 通过toString()方法
  • 通过subString(0,length)

案例演示


public class Demo6_StringBuffer {
	public static void main(String[] args) {
		//demo1();
		//demo2();
	}

	private static void demo2() {
		StringBuffer sb1 = new StringBuffer("heima");
		
		String s1 = new String(sb1);              //通过构造将StringBuffer转换为String
		System.out.println(s1);
		
		String s2 = sb1.toString();               //通过toString方法将StringBuffer转换为String
		System.out.println(s2);
		
		String s3 = sb1.substring(0, sb1.length());//通过截取子字符串将StringBuffer转换为String
		System.out.println(s3);
	}

	private static void demo1() {
		StringBuffer sb1 = new StringBuffer("heima");//通过构造方法将字符串转换为StringBuffer对象
		System.out.println(sb1);
		
		StringBuffer sb2 = new StringBuffer();
		sb2.append("heima");                      //通过append方法将字符串转换为StringBuffer对象
		System.out.println(sb2);
	}
}

StringBuffer与StringBuilder的区别

一.StringBuilder的概述

  • 通过查看API了解StringBuilder类

二.StringBuffer与StringBuilder的区别

  • StringBuffer是jdk1.0版本的,是线程安全的,效率低
  • StringBuilder是jdk1.5版本的,是线程不安全的,效率高

三.String与StringBuffer,StringBuilder的区别

  • String是一个不可变的字符序列
  • StringBuffer,StringBuilder是可变的字符序列

形式参数问题

  • String作为参数传递
  • StringBuffer作为参数传递

注意事项

  • 基本数据类型的值传递,不改变其值
  • 引用数据类型的值传递,改变其值

String类虽然是引用数据类型,但是他当做参数传递时和基本数据类型是一样不可变的

案例演示


public class Demo7_StringBuffer {
	public static void main(String[] args) {
		String s = "heima";
		System.out.println(s);//heima
		change(s);
		System.out.println(s);//heima
		
		StringBuffer sb = new StringBuffer();
		sb.append("heima");//heima
		change(sb);
		System.err.println(sb);//heimaitcast
	}

	public static void change(StringBuffer sb) {
		sb.append("itcast");
	}

	public static void change(String s) {
		s += "itcast";
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值