zoukankan      html  css  js  c++  java
  • String StringBuffer StringBuilder的异同

    1.String与StrIngBuffer StringBuilder的主要区别在于StrIng是不可变对象,每次对String对象进行修改之后,相对于重新创建一个对象。

    String源码解读:

    private final char value[];
    public String() {
            this.value = "".value;
        }
    

    不管何种String的构造函数,在初始化之后,其内部value是不可改变

    StringBuilder源码

    public final class StringBuilder
        extends AbstractStringBuilder
        implements java.io.Serializable, CharSequence
    

     可以看出继承了 AbstractStringBuilder 并且实现了序列化接口 java.io.Serializable  和 最底层接口CharSequence

     public StringBuilder() {
            super(16);
        }
    
     AbstractStringBuilder(int capacity) {
            value = new char[capacity];
        }

     可以看出其底层维持了一个char[]数组 长度为16

      public AbstractStringBuilder append(String str) {
            if (str == null)
                return appendNull();
            int len = str.length();
            ensureCapacityInternal(count + len);
            str.getChars(0, len, value, count);
            count += len;
            return this;
        }
    

     线程相关内容的 修改其内部的内容 并没有加同步机制

    StringBuffer的源码检查

    public final class StringBuffer
        extends AbstractStringBuilder
        implements java.io.Serializable, CharSequence
    

    可以看出继承的内容类与StringBuilder相同 实现的接口相同

    public StringBuffer() {
            super(16);
        }
     AbstractStringBuilder(int capacity) {
            value = new char[capacity];
        }

    可以看出底层实现都是char数组 长度为16

     @Override
        public synchronized StringBuffer append(String str) {
            toStringCache = null;
            super.append(str);
            return this;
        }
    
     @Override
        public synchronized StringBuffer delete(int start, int end) {
            toStringCache = null;
            super.delete(start, end);
            return this;
        }

    内部涉及数据操作部分是又一个同步的过程 是线程安全的

    最后涉及扩容机制 StringBuffer StringBuilder正常扩容

    最后一点StringBuilder AbstractStringBuilder都是1.5 StringBuffer是1.0

  • 相关阅读:
    京东架构师:前端工程化在京东首页实践
    CSS 的命名和书写
    call,apply,bind方法的总结
    this指针指向的彻底理解
    Js获取当前日期时间及其它操作
    gulp-css-spriter 雪碧图合成
    Web前端业界氛围极好的群——鬼懿IT
    默认加载数据分页,点击分页后再次异步数据
    height设置百分比的条件
    input 的type类型值
  • 原文地址:https://www.cnblogs.com/ad-zhou/p/9824445.html
Copyright © 2011-2022 走看看