Java中StringBuffer类

Java中StringBuffer类

如果文本(字符串)不会改变就用String类,因为String对象是不可变的。
如果文本(字符串)可以改变并且在单线程中访问,使用StringBuilder。(一般建议优先采用)
如果文本(字符串)可以改变并且在多线程中访问,使用StringBuffer。

1.StringBuffer与String的区别

StringBuffer、StringBulider:线程安全的可变字符序列(字符串缓存区)
(线程安全:效率低;线程不安全:效率高)
String:不可变的字符序列

2.StringBuffer与StringBuilder的区别:

StringBuffer:线程安全,支持同步,速度慢
StringBilder:(通常优先使用)线程不安全,与StringBuffer功能相同,但不支持同步,效率更高

3.StringBuffer类的构造方法

在这里插入图片描述

三种构造方法中优先考虑使用此种方法,如果容器的大小不够,则会自动扩充
  StringBuffer sb = new StringBuffer();
  System.out.println(sb.length());        //实际内容的长度(实际值)...0
  System.out.println(sb.capacity());      //容器的长度(理论值)...16(底层默认长度)
  
  StringBuffer sb2 = new  StringBuffer("woaixiyou");
  System.out.println(sb2.length());        //实际内容的长度(实际值)...9
  System.out.println(sb2.capacity());      //容器的长度(理论值)...25(16+9)底层默认长度加字符串本身长度大小
  
  StringBuffer sb3 = new StringBuffer(10);
  System.out.println(sb3.length());        //实际内容的长度(实际值)...0
  System.out.println(sb3.capacity());      //自定义了容器的大小(理论值)...10
4.StringBuffer类的添加功能
  • (1)在结尾添加( 附加 append )
StringBuffer sb = new StringBuffer("woaixiyou");
  sb.append(true);
  sb.append("1001");
  sb.append(10.3);
  System.out.println(sb);//woaixiyoutrue100110.3
StringBuffer sb = new StringBuffer("woaixiyou");
  StringBuffer sb2 = sb.append(200);
  StringBuffer sb3 = sb.append(true);
  System.out.println(sb3);//woaixiyou200true
  System.out.println(sb2);//woaixiyou200true

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

  • (2)在指定位置添加( 插入 insert)
StringBuffer sb = new StringBuffer("woaixiyou");
  sb.insert(2,"xuesheng");
  System.out.println(sb);//woxueshengaixiyou
5.StringBuffer类的删除功能
  • (1)删除某个索引位置上的元素
StringBuffer sb = new StringBuffer("nishini,woshiwo");
  sb.deleteCharAt(3);//删除某个索引上字符,并返回自身
  System.out.println(sb);//结果:nisini,woshiwo
  • (2)删除从某个索引到另一个索引之间的元素(包含头不包含尾
StringBuffer sb = new StringBuffer("woaixiyou");
 sb.delete(2,6);
 System.out.println(sb);//结果为woyou
  • (3)特例:清空缓存区(不要用新创建的缓存区认为是清空的,浪费内存)
StringBuffer sb = new StringBuffer("woaixiyou");
  sb.delete(0,sb.length());
  System.out.println(sb);
6.StringBuffer类的替换和反转功能
  • 替换功能(replace[替换]):从某个索引到另一个索引之间的字符串用另一个字符串代替
StringBuffer sb = new StringBuffer();
 sb.append("woaixiyou");
 sb.replace(0, 2, "ni");
 System.out.println(sb);//结果niaixiyou 
  • 反转功能( reverse[反向] ):将整个字符串进行反转
StringBuffer sb = new StringBuffer();
 sb.append("woaixiyou");
 sb.reverse();
 System.out.println(sb);//uoyixiaow
7.StringBuffer类的截取功能(***返回值不再是StringBuffer类型而是String类型***)
  • (1)从指定位置到结尾(从此索引开始之后的部分)
StringBuffer sb = new StringBuffer("woaixiyou");
  String sb2 = sb.substring(4);//截取索引为4以及之后部分直到结尾
  System.out.println(sb2);//结果为xiyou
  • (2)从指定位置到指定结束位置(截取两个给定索引之间部分,包含头不包含尾)
StringBuffer sb = new StringBuffer("woaixiyou");
  String sb2 = sb.substring(2,4);//截取索引为2以及4之间部分(包括2 不包括4)
  System.out.println(sb2);//结果为ai
8.StringBuffer与String类的相互转化
  • StringBuffer------>String
    (1) 通过string的构造方法
StringBuffer sb = new StringBuffer("woaixiyouji");
  String s = new String(sb);
  System.out.println(s);

(2)通过截取的方法(如上StringBuffer的截取功能)
(3)通过Tostring方法

StringBuffer sb = new StringBuffer("woaixiyouji");
String s = sb.toString();
System.out.println(s);
  • String------->StringBuffer
    (1)通过构造方法
StringBuffer sb2 = new  StringBuffer("woaixiyouji");
  System.out.println(sb2);  //结果为woaixiyouji   

(2)通过append方法

StringBuffer sb = new StringBuffer();
     sb.append("woaixiyouji");
     System.out.println(sb);//结果为woaixiyouji
String与StringBuffer分别作为参数传递
  • 基本数据类型值作为参数传递时,不改变其值
  • 引用数据类型作为参数传递时,改变其值
  • String虽然是引用数据类型,但是它作为参数传递时与基本数据类型相同
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值