美文网首页
浅入深出JavaSE面试题:String,StringBuild

浅入深出JavaSE面试题:String,StringBuild

作者: bug小王子 | 来源:发表于2017-03-12 20:46 被阅读0次

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[]数组的封装

继承体系.png

<h5>#2 可变与不可变的字符串</h5>

String是不可变的,StringBuilder与StringBuffer是可变字符串

String底层代码.png

什么是可变,什么是不可变,我将画两张简陋的内存分析图给大家看

string字符串追加字符串时.png StringBuilder字符串拼接.png

<h5>#3 线程安全分析</h5>

StringBuilder是线程不安全的,StringBuffer是线程安全的(这个看源码嘛~)

举个栗子


StringBuilder.png StringBuffer.png

看到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修饰符,不安全,但是性能较高.

相关文章

网友评论

      本文标题:浅入深出JavaSE面试题:String,StringBuild

      本文链接:https://www.haomeiwen.com/subject/qpcxnttx.html