• 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

  • 相关阅读:
    比特币全节点(bitcoind) eth 全节点
    Knowledge Tracing -- 基于贝叶斯的学生知识点追踪(BKT)
    trate
    spark
    linux 切换c++版本
    查找两个数组的相同字符(两个超大文件的相同字符)
    作业调度框架FluentScheduler
    .net与js数据交换中文乱码问题解决
    数据库死锁问题
    Service Fabric service 根据环境变量读取配置文件
  • 原文地址:https://www.cnblogs.com/ad-zhou/p/9824445.html
Copyright © 2020-2023  润新知