String,StringBuilder,StringBuffer都表示字符串,但是你真的了解过它们的区别吗
好,我们先看一下,网上大神们给我们准备好的答案:
答:
1.String的长度是不可变的;
2.StringBuffer的长度是可变的,如果你对字符串中的内容经常进行操作,
特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那使用StringBuffer的toString()方法;线程安全;
3.StringBuilder是从JDK5开始,为StringBuffer该类补充了一个单个线程使用的等价类;
通常应该优先使用StringBuilder类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。
那么我是如何给大家演示它们的区别和联系呢
工具:JDK API 1.6
<h5>#1 结构体系</h5>
1.都是java.lang.*包下面的类,所以不用导包(核心包是不需要导包的)
2.都实现了CharSequence接口(字符序列化)
什么是字符序列,什么是字符串定义,请期待我以后的JavaSE基础知识点讲解
3.底层都是对char[]数组的封装
<h5>#2 可变与不可变的字符串</h5>
String是不可变的,StringBuilder与StringBuffer是可变字符串
什么是可变,什么是不可变,我将画两张简陋的内存分析图给大家看
<h5>#3 线程安全分析</h5>
StringBuilder是线程不安全的,StringBuffer是线程安全的(这个看源码嘛~)
举个栗子
看到synchronized这个修饰符,你该懂了嘛
<h5>#4 速度测试</h5>
相同的字符串拼接下 耗时:String>StringBuffer>StringBuilder
因为string是不可变的,每改变内容一次,就会创建一块新的内存空间来存放对象的值,StringBuffer因为有synchronized修饰,所以效率相对StringBuilder较慢,但是安全
<h5># 总结</h5>
String和StringBuilder以及StringBuffer的区别(建议使用StringBuilder):
StringBuffer和StringBuilder都表示可变的字符串,功能方法都是相同的.
唯一的区别:
StringBuffer: StringBuffer中的方法都使用了synchronized修饰符,表示同步的,在多线程并发的时候可以保证线程安全,保证线程安全的时候,性能(速度)较低.
StringBuilder:StringBuilder中的方法都没有使用了synchronized修饰符,不安全,但是性能较高.