编程语言
首页 > 编程语言> > Java源码分析六(StringBulider)

Java源码分析六(StringBulider)

作者:互联网

Java源码分析六(StringBulider)

**继承的类和接口分析** ``` AbstractStringBuilder、Serializable、CharSequence ``` **类中出现的属性** ``` 序列号 static final long serialVersionUID = 4383685877147921099L; ``` **构造器** ``` //默认调用父类AbstractStringBuilder 创建一个长度为16的char数组 public StringBuilder() { super(16); } //传入一个字符串父类CharSequence 创建一个seq.length+16的char数组 public StringBuilder(CharSequence seq) { this(seq.length() + 16); append(seq); } //根据你传入的int值 创建一个长度为capacity的char数组 public StringBuilder(int capacity) { super(capacity); } //同上面CharSequence一个原理 public StringBuilder(String str) { super(str.length() + 16); append(str); } ``` **类中出现的方法** ``` //根据传入的布尔值调用父类的append(boolean b)方法方法使用步骤如下先判断当前count值(char数组存的数值)+“true” or“false”的长度 //4 或5 查询一下是否数组的长度够(如果不够就扩容扩容机制如下) //父类的扩容方法 默认新数组的长度为原数组的二倍+2 如果设计int 比较少见基本上没这么长的字符串越界问题就麻烦了 暂时就不说了 private int newCapacity(int minCapacity) { // overflow-conscious code int newCapacity = (value.length << 1) + 2; if (newCapacity - minCapacity < 0) { newCapacity = minCapacity; } return (newCapacity <= 0 || MAX_ARRAY_SIZE - newCapacity < 0) ? hugeCapacity(minCapacity) : newCapacity; } public StringBuilder append(boolean b) { super.append(b); return this; } //跟上面类似传入一个字符先判断空间够不够 不够就扩容 原理一样 public StringBuilder append(char c) { super.append(c); return this; } //先判断空间是否够否则扩容 public StringBuilder append(char[] str) { super.append(str); return this; } //方法类似 先判断当前数组长度能不能加入len长度数据 如果不能就扩容如果可以就在当前count后 //存入str数组从offset开始len个数据 public StringBuilder append(char[] str, int offset, int len) { super.append(str, offset, len); return this; } //加个字符串的父类 原理一模一样 public StringBuilder append(CharSequence s) { super.append(s); return this; } //跟上面原理一模一样 上面相当于 (s,0,arr.length) public StringBuilder append(CharSequence s, int start, int end) { super.append(s, start, end); return this; } //追加一个double public StringBuilder append(double d) { super.append(d); return this; } //在后面追加一个float public StringBuilder append(float f) { super.append(f); return this; } //添加int值的时候 如果i是int的最小值直接append("-2147483648"); 然后他自己看是否需要扩容 否则根据int值的长度去判断是否需要扩容 public StringBuilder append(int i) { super.append(i); return this; } //和int类似 先判断是否是long的最小值 public StringBuilder append(long lng) { super.append(lng); return this; }

标签:Java,seq,16,int,StringBulider,char,源码,数组,public
来源: https://www.cnblogs.com/yuteng666/p/15266216.html