专注JavaWeb开发 首页制式『默认式 OR 时间轴 网站地图|RSS订阅|设为首页|加入收藏
当前位置:首页 >Java >Java基础 > 正文

java中String&StringBuffer&StringBuilder区别

来源: 博客园 作者: 博客园 发布时间: 2017-02-23 浏览次数:

1.String,字符串常量

StringBuffer,字符串变量(线程安全)

StringBuilder,字符串变量(非线程安全)

2.String and StringBuffer

  String和StringBuffe的主要区别在于String是不可变对象,每次对String进行改变的时候其实 等于生成了一个新的String对象,因此经常改变内容的字符串不要使用String类型,因为每次形成新的对象都会对系统的性能产生影响,特别当内存中的无引用的对象多了之后,JVM的GC就会开始工作,那速度一定会相当慢的.

  StringBuffer每次的操作都是针对自身来进行操作,而不是形成新的对象,再改变对象的引用,所以在一般情况下推荐使用StringBuffer,特别是字符串对象经常改变的情况下.而在某些特别的情况下,String对象的字符串拼接其实是被解释成了StringBuffer对象的拼接,所以这些时候String对象的速度并不比StringBuffer慢,而特别是以下字符串对象的形成过程中,String的效率是要比StringBuffer快的:

String s1 = 'This is only a' + 'simple' + 'test';
StringBuffer buffer = new StringBuffer('this is only a').append('simple').append('test');


因为在JVM眼中,String s1 = 'This is only a' + 'simple' + 'test' ,其实就是String s1 = 'This is only a simple test';

但如果是这样的话:

String s2 = 'This is only a';
String s3 = 'simple';
String s4 = 'test';
String s1 = s2+s3+s4;


这个时候JVM就会按照原来的方式去做,

在大部分情况下:StringBuffer>String

3.StringBuffer

  java.lang.StringBuffer线程安全的可变字符序列,一个类似于String的字符串缓冲区,但不能修改.虽然在任意时间点上它都包含某种特定的字符序列,但通过某种方法调用可以改变该序列的长度和内容.

  可将字符串缓冲区安全的用于多个线程.可以在必要的时候对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与调用该方法的线程的执行顺序一致.

  StringBuffer上的主要操作时append和insert操作,可重载这些方法,以接受任意的数据类型,每个方法都能有效的将给定的数据转换为字符串,然后将该字符串追加或者插入到字符缓冲区中去

4.StringBuilder

  java.lang.StringBuilder线程非安全的可变字符串序列,是5.0新增的.此类提供一个与StringBuffer兼容的API,但不保证同步 .该类被设计用作StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候,如果可能,简易优先采用该类,因为在大多数时候,StringBuilder要比StringBuffer要快,两者的方法基本相同.


QQ群: 武汉地区(142173356)验证消息JavaWeb1024

网友共有【】评论,点击查看



x 微信关注我们 随时获取最新网站资讯