String、StringBuffer、StringBuilder详解

String、StringBuffer、StringBuilder之间的区别.三者在执行速度方面的比较:StringBuilder > StringBuffer > String

1、String
public final class String extends Object;
该类属于字符串常量类;它们的值在创建之后不能修改
String s1=”abc”;
String s2=”abc”
上面两行代码共创建了几个对象?
s1与s2按道理来说应该是两个引用对象,故因此应该创建了两个对象才是,这样想无可厚非。但其实只创建了一个对象,”abc”本身在字符串池中就是一个对象,然后赋值给引用对象s1。因为JVM先在字符串常量池中查找,看是否已经存在值为”abc”的对象,如果存在,则不再创建新的对象,返回已有的对象的引用。

  /*
String s1=new String("abc");//创建了两个对象

String s3=”ab”;
s3=s3+”c”;//创建了两个对象,在内存中申请了两块内存区域
String s4=”a”+”b” +”c” ;//创建了一个对象,在内存中申请一块内存区域
System.out.println(s3==”abc”);
System.out.println(s4==”abc”);
第一个打印为false,第二个打印为true。详情请见:http://wenda.so.com/q/1364519961064179
由此可见:如果大量的使用String类的话,非常消耗内存,不利于优 化。

2.StringBuffer
该类属于多线程安全同步的可变字符串缓冲区。
该类常用到的方法有append(Object obj),insert(int offset,Object obj) ,这里就不做解释了。
优点是:StringBuffer buffer=new StringBuffer();
buffer.append(String str).append(…);
此方式追加字段,只会申请一块内存,较大的减少了内存的消耗。
3.StringBuilder
该类与StringBuffer兼容,属于单线程不同步的可变字符缓冲区。
使用情景: 
当我们在字符串缓冲去被多个线程使用是,JVM不能保证StringBuilder的操作是安全的,虽然他的速度最快,但是可以保证StringBuffer是可以正确操作的。当然大多数情况下就是我们是在单线程下进行的操作,所以大多数情况下是建议用StringBuilder而不用StringBuffer的,就是速度的原因。

对于三者使用的总结:
1.如果要操作少量的数据用 = String
2.单线程操作字符串缓冲区 下操作大量数据 = StringBuilder
3.多线程操作字符串缓冲区 下操作大量数据 = StringBuffer

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值