Java中StringBuffer和StringBuilder类

一、StringBuffer类

线程安全的可变字符串,相比于String可以节省空间
线程安全:
安全——同步——数据是安全的
不安全——不同步——效率高一些
安全和效率的问题

1、 构造方法

a) public StringBuffer(); 无参构造方法,初始化容量为16
b) public StringBuffer(int capacity) 指定容量的字符串缓冲区对象
c) public StringBuffer(String str) 指定字符串内容的字符串缓冲区对象,容量为字符串的长度+16

2、 添加功能

a) public StringBuffer append(String str)可以把任意类型添加到字符缓冲区 ,并返回字符串缓冲区本身(在缓冲区后面添加)
  i. StringBuffer sb1=new StringBuffer()
  ii. StringBuffer sb2=sb1.append(hello)
  iii. 这时候sb1和sb2里面都是hello因为是先在s1字符缓冲区中添加hello之后将字
  符串缓冲区本身返回给s2
b) public StringBuffer insert(int offset,String str)将任意类型的数据插入到字符串缓冲区的指定位置,并返回字符串本身。其余字符串后延。

3、 删除功能

a) public StringBuffer deleteCharAt(int index)删除指定位置的字符、并返回本身
b) public StringBuffer delete(int start,int end)删除指定位置的字符串,并返回本身。
   删除的字符串包含start,不包含end

4、 替换功能

a) public StringBuffer replace (int stat ,int end ,String str)不包含end

5、 反转功能

a) public StringBuffer reverse()

6、 截取功能注意返回值类型为String,StringBuffer的数据并不改变

a) public String substring(int start)
  i. 返回值为String类,且不改变原StringBuffrer中的数据
  ii. StringBuffer sb= new StringBuffer()
  iii. sb.append(HelloWorld);
  iv. String s=sb,substring(5)
  v. 这时候输出s为World,sb为HelloWorld,并不会因为截取而改变。
  (与上面的功能不同)
b) public String substring(int start,int end)包含start不包含end

7、 String和StringBuffer中的转换(为了用StringBuffer的方法,转过来还需要转回去)

String转换为StringBuffer
 a) 方式1通过构造方法转换
  i. String s=”hello”
  ii. StringBuffer sb=new StringBuffer(s)
 b) 通过append()方法
  i. StringBuffer sb2=new StringBuffer();
  ii. sb2.append(s)
StringBuffer转换为String
 a) 方式1通过构造方法转换
  StringBuffer buffer=new StringBuffer(“java”)
  String s=new String(buffer)
 b) 通过toString()方法
  String str2=buffer.toString();

8、 String 、StringBuffer、StringBuilder 的区别

a) String是内容不可变的,而StringBuffer、StringBuilder都是内容可以变得
b) StringBuffer是同步的,数据安全,效率低,StringBuilder是不同步的,数据不安全,效率高。

9、 StringBuffer和数组的区别

StringBuffer可以装任何类型的数据,但是最终都会转换为字符串数据,而数组确定了数据类型之后就只能装此种类型的数据。

10、形式参数的问题

基本类型:形式参数的改变不影响实际参数
引用类型:引用类型的改变直接影响实际参数

String作为参数传递效果是和基本类型作为参数传递效果一样的。
StingBuffer作为参数传递时,在方法中直接赋值不改变实际结果,如果是调用方法赋值结果会发生变化。(String和StringBuffer作为形式参数传递的实例在https://blog.csdn.net/zfliu96/article/details/83240022)

二、StringBuilder类

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值