java的基础学习(三:StringBuffer和StringBuilder类的详细介绍)

一、概述

字符序列:String\StringBuffer\StringBuilder
String类型的对象不可变,所以又配备了另一个类StringBuffer,它是可变的字符序列。
StringBuffer:又称为字符串缓冲区,内部用char[]数组存储。
String、和StringBuffer和StringBuilder三者的异同
(1)相同点:三种底层都使用char[]数组
(2)不同点:
String:不可变的字符序列
StringBuffer:可变的字符序列,线程安全的,效率低。jdk1.0就有。
StringBuilder:可变的字符序列,jdk1.5新增的,线程不安全的,效率高。
三者的执行效率:StringBuilder > StringBuffer > String

二、StringBuffer和StringBuilder的初始化问题

StringBuffer:创建对象必须用new;拼接不能直接用+,可以用append()方法。
char[]的初始化长度是多少?

  • StringBuffer():默认16
  • StringBuffer(String str):str.length + 16;
  • StringBuffer(int capacity):默认由capacity决定
    char[]存满了怎么办?
    先把value的数组扩大为value.length *2+2,如果还不够按实际来。

三、String与StringBuffer、StringBuilder之间的转换

3.1 String–>StringBuffer、StringBuilder:调用StringBuffer、StringBuilder构造器

3.2 StringBuffer、StringBuilder --> String :1、调用String构造器;2、调用StringBuffer、StringBuilder的toString()方法

四、常用方法

4.1 append系列: 用于追加xxx

4.2 insert系列:插入xx

4.3 delete系列:删除

4.4 reverse系列:反转

4.5 replace(int start,int end,String str)系列:把[star,end)位置替换为str

4.6 int indexOf(String str):获取某子串索引

4.7 String substring(int start,int end):获取一个子串

4.8 int length():得到StringBuffer长度

4.9 char charAt(int n):获取某个索引位置的字符

4.10 void setCharAt(int n,char ch):将某个索引位置的字符修改为ch

  • 总结:
  • 增:append(xxx)
  • 删:delete(int start,int end)
  • 改:SetCharAt(int n,char ch)\replace(int start,int end,String str)
  • 查:charAt(int n)
  • 插:insert(int offset,xxx)
  • 长度:length()
  • 遍历:for() + charAt() 或者 toString()
  • StringBuffer:又称为字符串缓冲区,内部用char[]数组存储。
@Test
 public void test1() {
  StringBuffer sb1 = new StringBuffer("abc");
  sb1.append(1);
  sb1.append('1');
  System.out.println(sb1);//abc11
  sb1.insert(1, false);//插入方法,在索引1位置插入false,但是原来索引1处的'b'仍然在,只不过在false后面
  System.out.println(sb1);//afalsebc11
  System.out.println(sb1.length());//10
 }
@Test
 public void test1() {
  StringBuffer sb1 = new StringBuffer("abc");
  sb1.replace(0, 2, "mn");
  System.out.println(sb1);//mnc
 }
@Test
 public void test2() {
  String str = "hello";
  StringBuffer s = new StringBuffer("hello");
  change(str,s);//为了证明String是不可变的,StringBuffer是可变的
  System.out.println(str);//hello
  System.out.println(s);//helloworld
  StringBuffer s1 = new StringBuffer();
  s1.append(1).append(2).append(3);
  System.out.println(s1);//123
 }
 public void change(String str,StringBuffer sb) {
  str += "world";
  sb.append("world");
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值