您现在的位置是:首页 > 文章详情

java String StringBuilder StringBuffer

日期:2018-09-10点击:326

开篇

看了源码之后会发现有关java的String知识点面试的确很无聊,但凡看过代码的基本上都知道,所以我们去面试别人就用这个去面试别人就是为了验证别人有没有看过源码?


String源码分析

  • String通过char value[]的字符数组来保存数据。
public final class String implements java.io.Serializable, Comparable<String>, CharSequence { private final char value[]; /** Cache the hash code for the string */ private int hash; // Default to 0 private static final long serialVersionUID = -6849794470754667710L; private static final ObjectStreamField[] serialPersistentFields = new ObjectStreamField[0]; public String() { this.value = "".value; } public String(String original) { this.value = original.value; this.hash = original.hash; } public String(char value[]) { this.value = Arrays.copyOf(value, value.length); } } 


StringBuilder源码分析

  • StringBuilder继承自AbstractStringBuilder类,数组存储对象在基类中实现
  • StringBuilder的方法没有加锁操作,非线程安全
public final class StringBuilder extends AbstractStringBuilder implements java.io.Serializable, CharSequence { /** use serialVersionUID for interoperability */ static final long serialVersionUID = 4383685877147921099L; public StringBuilder() { super(16); } public StringBuilder(int capacity) { super(capacity); } public StringBuilder(String str) { super(str.length() + 16); append(str); } public StringBuilder(CharSequence seq) { this(seq.length() + 16); append(seq); } @Override public StringBuilder append(Object obj) { return append(String.valueOf(obj)); } @Override public StringBuilder append(String str) { super.append(str); return this; } } 


StringBuffer源码分析

  • StringBuffer继承自AbstractStringBuilder类,数组存储对象在基类中实现
  • StringBuffer的方法有加锁操作,线程安全
  • StringBuffer内部通过toStringCache变量提高toString()性能
 public final class StringBuffer extends AbstractStringBuilder implements java.io.Serializable, CharSequence { private transient char[] toStringCache; /** use serialVersionUID from JDK 1.0.2 for interoperability */ static final long serialVersionUID = 3388685877147921107L; public StringBuffer() { super(16); } public StringBuffer(int capacity) { super(capacity); } public StringBuffer(String str) { super(str.length() + 16); append(str); } public StringBuffer(CharSequence seq) { this(seq.length() + 16); append(seq); } @Override public synchronized int length() { return count; } @Override public synchronized int capacity() { return value.length; } @Override public synchronized StringBuffer append(Object obj) { toStringCache = null; super.append(String.valueOf(obj)); return this; } @Override public synchronized StringBuffer append(String str) { toStringCache = null; super.append(str); return this; } } 


共同基类AbstractStringBuilder

  • AbstractStringBuilder作为StringBuilder和StringBuffer的基类
  • AbstractStringBuilder通过char[] value保存字符串
  • AbstractStringBuilder内部包含count字段进行计数
abstract class AbstractStringBuilder implements Appendable, CharSequence { char[] value; int count; AbstractStringBuilder() { } AbstractStringBuilder(int capacity) { value = new char[capacity]; } @Override public int length() { return count; } public int capacity() { return value.length; } } 
原文链接:https://yq.aliyun.com/articles/666290
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章