Java常用类
Posted Steve_Nash
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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数组,那么数组定好了,长度就不会变了,那么自动扩容是怎么回事?是建一个新数组,将原始数组数据拷贝过来,所以是比较耗内存耗时间的,
所以最好在创建这两个类的对象的时候预测好需要的容量,采用指定容量的方式来创建对象,为了减少数组的拷贝,提高效率。
以上是关于Java常用类的主要内容,如果未能解决你的问题,请参考以下文章
elasticsearch代码片段,及工具类SearchEsUtil.java