400-870-1191

当前位置:首页 > 技术交流 > String /StringBuilder / StringBuffer的区别?

String /StringBuilder / StringBuffer的区别?

2018/07/11 18:37 分类: 技术交流 浏览:0

      在Java开发面试经常会被问到String,StringBuider,StringBuffer区别,很多人回答得不够全面和深入,那么它们到底都有什么区别呢!
      三者都是用来对字符串进行操作,String通常用来定义一个变量,而StringBuilder  StringBuffer则通常用来对字符串进行拼接等操作。但其实String同样的可以用来拼接字符串,可我们为什么很少使用呢,这样从三者的底层代码说起。
String的底层代码为一个用final修饰的char数组,这意味着定义一个String变量以后,该变量的内容是不可变的。
StringBuilder 与StringBuffer都继承自AbstractStringBuilder,该类的char数组并没有用final修饰,内容是可变的,这个是什么意思呢。
比如:
String s1= "a";
String s2 = new String("b") ;
String s3 = s1+s2;
如果这样,我们得到“ab”这个字符串,因为String底层未不可变的字符串,所以会创建三个对象,都会占用内存,而这三个对象一直都未失去引用,所以jvm无法垃圾回收,造成内存资源的大量浪费,这在我们开发中是不推崇的,而StringBuilder 与StringBuffer则不存在这样的问题。
   

 

通过底层代码我们可以看到StringBuilder 与StringBuffer在拼接字符串时,通过判断字符串长度是否足够,从而创建一个新的数组用来封装数据,而原来的对象被放弃引用,等待垃圾回收,从而减少内存的浪费,因此在拼接字符串等操作时,我们通常使用StringBuilder 与StringBuffer,但两者在执行效率上又有不同,StringBuilder的执行效率较高,这是为什么呢?
通过底层源码,可以发现StringBuffer在拼接字符串时,使用了同步锁,安全性提高,而StringBuilder未使用同步锁,故效率提高。
   现在应该弄清楚他们三者之间的区别了吧!!
 
    感谢源码时代教学讲师提供此文章!
    本文为原创文章,转载请注明出处!
#标签:String,StringBuilder,StringBuffe