java学习---解析StringBuffer和StringBuilder

想必大家都遇到过在java中使用String来对字符串进行添加另一个字符串。

如:

String str1 = "abc";
String str2 = str1+"def";

这样每次都需要添加一个新的变量来接收新的字符串,很麻烦!(也许就2行,大家觉得还能接受,但是如果需要几百行甚至几千行呢?)那么java有没有给我们提供一个能拼接字符串,还能不产生新对象占用内存呢? 有的,还不止一个,今天来介绍2个:(末尾会讲二者区别)

1.StringBuffer

StringBuffer是一种保证线程安全的字符串拼接手段,那么它的使用很简单,如下:

StringBuffer sb1 = new StringBuffer("abc");
sb1.append("def");
System.out.println(sb1);//abcdef

//甚至还可以支持链式编程
StringBuffer sb2 = new StringBuffer("abc");
sb2.append("def").append("ghi").append("jkl");
System.out.println(sb2);//abcdefghijkl

接下来我们看看他的常用API:

append就不说了,就是拼接字符串的作用。

StringBuffer SB = new StringBuffer();
System.out.println(SB.capacity());//16
StringBuffer sb = new StringBuffer("abc");
System.out.println(sb.capacity());//19

capacity是返回Stringbuffer的容量,初始默认是16,加了三个字符就是19。扩容机制都是”旧容量*2+2”

StringBuffer SB = new StringBuffer("abc");
SB.insert(3,"d");//在下标为三的位置插入 “d”
System.out.println(SB);//abcd

insert(int x,String str)在下标为x的位置插入str。

StringBuffer SB = new StringBuffer("abc");
        
System.out.println(SB.charAt(0));//a

返回该索引(0)位置的字符串。

StringBuffer SB = new StringBuffer("abc");
System.out.println(SB.delete(0, 1));//[0,1)

删除[0,1)区间内的字符串,注意这里包左不包右。

StringBuffer sb = new StringBuffer("abc");
sb.append("d").append("e").append("f");
System.out.println(sb.reverse());//fedcba

reverse这个api是将字符串进行反转,大家一定都很熟悉。

因为StringBuffer是在java.util包下的,所以不用导包啦!看上面的代码,发现StringBuffer就不用生成新变量来接收,而且支持链式编程。看到这,也许你会问,StringBuffer这么好用,那我还有学下一个的必要了吗?其实,StringBuffer也有一个较大的缺点,那就是在运行的速度上来看,是比较慢的,对于一些正在学习算法的朋友来说,可能就不是太适合在某些题目中。

2.StringBuilder

StringBuilder是第二种拼接字符串的手段。那么他在运行速度上就快很多了,在使用方面二者都差不多。

可以说上面介绍的StringBuffer的API,这里也都适用。

3.二者区别与共同点

相同点:来自网上的一张图

 从这可以看出,1.它们的继承关系是一样的,2.并且都是对字符串进行操作的,3.还有扩容机制都一样。

不同点:

  1. StringBuffer是速度慢,但是线程安全,StringBuilder不是线程安全的,但是速度快。
  2. 性能上StringBuilder应该要优于StringBuffer , 大部分情况下 ,StringBuffer<StringBuilder
  3. 出现时间不同,StringBuffer是JDK1.0出现的,StringBuilder是JDK5.0出现的

总结:StringBuilder 总是会比StringBuffer的速度快一些,但是差不太多啦!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值