zoukankan      html  css  js  c++  java
  • Java常用类

    StringBuffer和StringBuilder

    是什么?字符串缓存区

    工作原理:

      预先在内存中申请一块空间,以容纳字符序列,如果预留的空间不够用,则进行自动扩容,以容纳更多的字符序列

    StringBuffer、StringBuilder和String的区别:

      String是不可变的字符序列,存储字符串常量池中

      StringBuffer底层是一个char数组,但是该数组是可变的,并且可以自动扩容

    public final class StringBuffer
        extends AbstractStringBuilder
        implements java.io.Serializable, CharSequence
    {
    
        /**
         * A cache of the last value returned by toString. Cleared
         * whenever the StringBuffer is modified.
         */
        private transient char[] toStringCache;
    
    
        /**
         * Constructs a string buffer with no characters in it and an
         * initial capacity of 16 characters.
         */
        public StringBuffer() {
            super(16);  //默认容量为16
        }
    
    
        public StringBuffer(int capacity) {
            super(capacity);
        }
    
      
        public StringBuffer(String str) {
            super(str.length() + 16);
            append(str);
        }
    }

      StringBuilder和StringBuffer的默认容量是16

    abstract class AbstractStringBuilder implements Appendable, CharSequence {
        /**
         * The value is used for character storage.
         */
        char[] value;
    
        /**
    }

      里面是一个char数组,那么数组定好了,长度就不会变了,那么自动扩容是怎么回事?是建一个新数组,将原始数组数据拷贝过来,所以是比较耗内存耗时间的,

    所以最好在创建这两个类的对象的时候预测好需要的容量,采用指定容量的方式来创建对象,为了减少数组的拷贝,提高效率。

    两者区别

    StringBuffer是线程安全的(源码里大多方法都用了synchronized),StringBuilder不是线程安全的

  • 相关阅读:
    前端开发者也可以酷酷地开发桌面程序
    V部落,V人事
    jq 正方体旋转
    jq 实现旋转木马
    jquery 获取元素(父节点,子节点,兄弟节点)
    Vue.js面试题整理
    Java面试必备技能
    在前后端分离的SpringBoot项目中集成Shiro权限框架
    正则表达式大全
    Docker容器日志查看与清理
  • 原文地址:https://www.cnblogs.com/i-love-kobe/p/5980112.html
Copyright © 2011-2022 走看看